QmlDesigner: Inline timelinesettingsdialog.ui

Change-Id: Ib590944e3dcf8f1069bdeeb08b206a9ca9de5ce1
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Alessandro Portale
2023-06-13 15:24:12 +02:00
parent 22d5807799
commit c9c029ebd4
4 changed files with 60 additions and 125 deletions

View File

@@ -984,8 +984,7 @@ extend_qtc_plugin(QmlDesigner
timelinepropertyitem.cpp timelinepropertyitem.h timelinepropertyitem.cpp timelinepropertyitem.h
timelinesectionitem.cpp timelinesectionitem.h timelinesectionitem.cpp timelinesectionitem.h
timelineselectiontool.cpp timelineselectiontool.h timelineselectiontool.cpp timelineselectiontool.h
timelinesettingsdialog.cpp timelinesettingsdialog.cpp timelinesettingsdialog.h
timelinesettingsdialog.h timelinesettingsdialog.ui
timelinesettingsmodel.cpp timelinesettingsmodel.h timelinesettingsmodel.cpp timelinesettingsmodel.h
timelinetoolbar.cpp timelinetoolbar.h timelinetoolbar.cpp timelinetoolbar.h
timelinetoolbutton.cpp timelinetoolbutton.h timelinetoolbutton.cpp timelinetoolbutton.h

View File

@@ -2,7 +2,6 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "timelinesettingsdialog.h" #include "timelinesettingsdialog.h"
#include "ui_timelinesettingsdialog.h"
#include "timelineanimationform.h" #include "timelineanimationform.h"
#include "timelineform.h" #include "timelineform.h"
@@ -19,9 +18,15 @@
#include <variantproperty.h> #include <variantproperty.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/layoutbuilder.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QDialogButtonBox>
#include <QHeaderView>
#include <QKeyEvent> #include <QKeyEvent>
#include <QSpinBox>
#include <QTabWidget>
#include <QTableView>
#include <QToolBar> #include <QToolBar>
namespace QmlDesigner { namespace QmlDesigner {
@@ -75,12 +80,12 @@ static void setTabForAnimation(QTabWidget *tabWidget, const ModelNode &animation
TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *view) TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *view)
: QDialog(parent) : QDialog(parent)
, ui(new Ui::TimelineSettingsDialog)
, m_timelineView(view) , m_timelineView(view)
{ {
m_timelineSettingsModel = new TimelineSettingsModel(this, view); resize(520, 600);
setModal(true);
ui->setupUi(this); m_timelineSettingsModel = new TimelineSettingsModel(this, view);
auto *timelineCornerWidget = new QToolBar; auto *timelineCornerWidget = new QToolBar;
@@ -93,7 +98,7 @@ TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *vi
}); });
connect(timelineRemoveAction, &QAction::triggered, this, [this]() { connect(timelineRemoveAction, &QAction::triggered, this, [this]() {
QmlTimeline timeline = getTimelineFromTabWidget(ui->timelineTab); QmlTimeline timeline = getTimelineFromTabWidget(m_timelineTab);
if (timeline.isValid()) { if (timeline.isValid()) {
timeline.destroy(); timeline.destroy();
setupTimelines(QmlTimeline()); setupTimelines(QmlTimeline());
@@ -103,10 +108,10 @@ TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *vi
timelineCornerWidget->addAction(timelineAddAction); timelineCornerWidget->addAction(timelineAddAction);
timelineCornerWidget->addAction(timelineRemoveAction); timelineCornerWidget->addAction(timelineRemoveAction);
ui->timelineTab->setCornerWidget(timelineCornerWidget, Qt::TopRightCorner); m_timelineTab = new QTabWidget;
m_timelineTab->setCornerWidget(timelineCornerWidget, Qt::TopRightCorner);
auto *animationCornerWidget = new QToolBar; auto *animationCornerWidget = new QToolBar;
auto *animationAddAction = new QAction(TimelineIcons::ADD_TIMELINE.icon(), tr("Add Animation")); auto *animationAddAction = new QAction(TimelineIcons::ADD_TIMELINE.icon(), tr("Add Animation"));
auto *animationRemoveAction = new QAction(TimelineIcons::REMOVE_TIMELINE.icon(), auto *animationRemoveAction = new QAction(TimelineIcons::REMOVE_TIMELINE.icon(),
tr("Remove Animation")); tr("Remove Animation"));
@@ -119,21 +124,40 @@ TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *vi
}); });
connect(animationRemoveAction, &QAction::triggered, this, [this]() { connect(animationRemoveAction, &QAction::triggered, this, [this]() {
ModelNode node = getAnimationFromTabWidget(ui->animationTab); ModelNode node = getAnimationFromTabWidget(m_animationTab);
if (node.isValid()) { if (node.isValid()) {
node.destroy(); node.destroy();
setupAnimations(m_currentTimeline); setupAnimations(m_currentTimeline);
} }
}); });
ui->animationTab->setCornerWidget(animationCornerWidget, Qt::TopRightCorner); m_animationTab = new QTabWidget;
ui->buttonBox->clearFocus(); m_animationTab->setCornerWidget(animationCornerWidget, Qt::TopRightCorner);
m_tableView = new QTableView;
QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
sp.setVerticalStretch(1);
m_tableView->setSizePolicy(sp);
auto buttonBox = new QDialogButtonBox;
buttonBox->setStandardButtons(QDialogButtonBox::Close);
buttonBox->clearFocus();
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
using namespace Layouting;
Column {
m_timelineTab,
m_animationTab,
m_tableView,
buttonBox,
}.attachTo(this);
setupTimelines(QmlTimeline()); setupTimelines(QmlTimeline());
setupAnimations(m_currentTimeline); setupAnimations(m_currentTimeline);
connect(ui->timelineTab, &QTabWidget::currentChanged, this, [this]() { connect(m_timelineTab, &QTabWidget::currentChanged, this, [this]() {
m_currentTimeline = getTimelineFromTabWidget(ui->timelineTab); m_currentTimeline = getTimelineFromTabWidget(m_timelineTab);
setupAnimations(m_currentTimeline); setupAnimations(m_currentTimeline);
}); });
setupTableView(); setupTableView();
@@ -142,12 +166,7 @@ TimelineSettingsDialog::TimelineSettingsDialog(QWidget *parent, TimelineView *vi
void TimelineSettingsDialog::setCurrentTimeline(const QmlTimeline &timeline) void TimelineSettingsDialog::setCurrentTimeline(const QmlTimeline &timeline)
{ {
m_currentTimeline = timeline; m_currentTimeline = timeline;
setTabForTimeline(ui->timelineTab, m_currentTimeline); setTabForTimeline(m_timelineTab, m_currentTimeline);
}
TimelineSettingsDialog::~TimelineSettingsDialog()
{
delete ui;
} }
void TimelineSettingsDialog::keyPressEvent(QKeyEvent *event) void TimelineSettingsDialog::keyPressEvent(QKeyEvent *event)
@@ -165,17 +184,17 @@ void TimelineSettingsDialog::keyPressEvent(QKeyEvent *event)
void TimelineSettingsDialog::setupTableView() void TimelineSettingsDialog::setupTableView()
{ {
ui->tableView->setModel(m_timelineSettingsModel); m_tableView->setModel(m_timelineSettingsModel);
m_timelineSettingsModel->setupDelegates(ui->tableView); m_timelineSettingsModel->setupDelegates(m_tableView);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableView->verticalHeader()->hide(); m_tableView->verticalHeader()->hide();
ui->tableView->setSelectionMode(QAbstractItemView::NoSelection); m_tableView->setSelectionMode(QAbstractItemView::NoSelection);
m_timelineSettingsModel->resetModel(); m_timelineSettingsModel->resetModel();
} }
void TimelineSettingsDialog::setupTimelines(const QmlTimeline &timeline) void TimelineSettingsDialog::setupTimelines(const QmlTimeline &timeline)
{ {
deleteAllTabs(ui->timelineTab); deleteAllTabs(m_timelineTab);
const QList<QmlTimeline> &timelines = m_timelineView->getTimelines(); const QList<QmlTimeline> &timelines = m_timelineView->getTimelines();
@@ -183,7 +202,7 @@ void TimelineSettingsDialog::setupTimelines(const QmlTimeline &timeline)
m_currentTimeline = QmlTimeline(); m_currentTimeline = QmlTimeline();
auto timelineForm = new TimelineForm(this); auto timelineForm = new TimelineForm(this);
timelineForm->setDisabled(true); timelineForm->setDisabled(true);
ui->timelineTab->addTab(timelineForm, tr("No Timeline")); m_timelineTab->addTab(timelineForm, tr("No Timeline"));
return; return;
} }
@@ -196,14 +215,14 @@ void TimelineSettingsDialog::setupTimelines(const QmlTimeline &timeline)
m_currentTimeline = timelines.constFirst(); m_currentTimeline = timelines.constFirst();
} }
setTabForTimeline(ui->timelineTab, m_currentTimeline); setTabForTimeline(m_timelineTab, m_currentTimeline);
setupAnimations(m_currentTimeline); setupAnimations(m_currentTimeline);
m_timelineSettingsModel->resetModel(); m_timelineSettingsModel->resetModel();
} }
void TimelineSettingsDialog::setupAnimations(const ModelNode &animation) void TimelineSettingsDialog::setupAnimations(const ModelNode &animation)
{ {
deleteAllTabs(ui->animationTab); deleteAllTabs(m_animationTab);
const QList<ModelNode> animations = m_timelineView->getAnimations(m_currentTimeline); const QList<ModelNode> animations = m_timelineView->getAnimations(m_currentTimeline);
@@ -213,7 +232,7 @@ void TimelineSettingsDialog::setupAnimations(const ModelNode &animation)
if (animations.isEmpty()) { if (animations.isEmpty()) {
auto animationForm = new TimelineAnimationForm(this); auto animationForm = new TimelineAnimationForm(this);
animationForm->setDisabled(true); animationForm->setDisabled(true);
ui->animationTab->addTab(animationForm, tr("No Animation")); m_animationTab->addTab(animationForm, tr("No Animation"));
if (currentTimelineForm()) if (currentTimelineForm())
currentTimelineForm()->setHasAnimation(false); currentTimelineForm()->setHasAnimation(false);
} else { } else {
@@ -222,14 +241,14 @@ void TimelineSettingsDialog::setupAnimations(const ModelNode &animation)
} }
if (animation.isValid()) if (animation.isValid())
setTabForAnimation(ui->animationTab, animation); setTabForAnimation(m_animationTab, animation);
m_timelineSettingsModel->resetModel(); m_timelineSettingsModel->resetModel();
} }
void TimelineSettingsDialog::addTimelineTab(const QmlTimeline &node) void TimelineSettingsDialog::addTimelineTab(const QmlTimeline &node)
{ {
auto timelineForm = new TimelineForm(this); auto timelineForm = new TimelineForm(this);
ui->timelineTab->addTab(timelineForm, node.modelNode().displayName()); m_timelineTab->addTab(timelineForm, node.modelNode().displayName());
timelineForm->setTimeline(node); timelineForm->setTimeline(node);
setupAnimations(ModelNode()); setupAnimations(ModelNode());
} }
@@ -237,13 +256,13 @@ void TimelineSettingsDialog::addTimelineTab(const QmlTimeline &node)
void TimelineSettingsDialog::addAnimationTab(const ModelNode &node) void TimelineSettingsDialog::addAnimationTab(const ModelNode &node)
{ {
auto timelineAnimationForm = new TimelineAnimationForm(this); auto timelineAnimationForm = new TimelineAnimationForm(this);
ui->animationTab->addTab(timelineAnimationForm, node.displayName()); m_animationTab->addTab(timelineAnimationForm, node.displayName());
timelineAnimationForm->setup(node); timelineAnimationForm->setup(node);
} }
TimelineForm *TimelineSettingsDialog::currentTimelineForm() const TimelineForm *TimelineSettingsDialog::currentTimelineForm() const
{ {
return qobject_cast<TimelineForm *>(ui->timelineTab->currentWidget()); return qobject_cast<TimelineForm *>(m_timelineTab->currentWidget());
} }
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -7,7 +7,11 @@
#include <QDialog> #include <QDialog>
QT_FORWARD_DECLARE_CLASS(QSpinBox) QT_BEGIN_NAMESPACE
class QSpinBox;
class QTabWidget;
class QTableView;
QT_END_NAMESPACE
namespace QmlDesigner { namespace QmlDesigner {
@@ -16,10 +20,6 @@ class TimelineAnimationForm;
class TimelineView; class TimelineView;
class TimelineSettingsModel; class TimelineSettingsModel;
namespace Ui {
class TimelineSettingsDialog;
}
class TimelineSettingsDialog : public QDialog class TimelineSettingsDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
@@ -27,7 +27,6 @@ class TimelineSettingsDialog : public QDialog
public: public:
explicit TimelineSettingsDialog(QWidget *parent, TimelineView *view); explicit TimelineSettingsDialog(QWidget *parent, TimelineView *view);
void setCurrentTimeline(const QmlTimeline &timeline); void setCurrentTimeline(const QmlTimeline &timeline);
~TimelineSettingsDialog() override;
protected: protected:
void keyPressEvent(QKeyEvent *event) override; void keyPressEvent(QKeyEvent *event) override;
@@ -42,7 +41,9 @@ private:
TimelineForm *currentTimelineForm() const; TimelineForm *currentTimelineForm() const;
Ui::TimelineSettingsDialog *ui; QTabWidget *m_timelineTab;
QTabWidget *m_animationTab;
QTableView *m_tableView;
TimelineView *m_timelineView; TimelineView *m_timelineView;
QmlTimeline m_currentTimeline; QmlTimeline m_currentTimeline;

View File

@@ -1,84 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QmlDesigner::TimelineSettingsDialog</class>
<widget class="QDialog" name="QmlDesigner::TimelineSettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>519</width>
<height>582</height>
</rect>
</property>
<property name="windowTitle">
<string>Timeline Settings</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="timelineTab">
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
<item>
<widget class="QTabWidget" name="animationTab">
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="tableView"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>QmlDesigner::TimelineSettingsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QmlDesigner::TimelineSettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>