#include "dialogs/AnimationSchemeSettingsDialog.h" #include "core/domain/Project.h" #include "core/workspace/ProjectWorkspace.h" #include #include #include #include #include #include #include #include AnimationSchemeSettingsDialog::AnimationSchemeSettingsDialog(Mode mode, core::ProjectWorkspace& workspace, QWidget* parent) : QDialog(parent) , m_mode(mode) , m_workspace(workspace) { setModal(true); setMinimumWidth(360); if (mode == Mode::Create) { setWindowTitle(QStringLiteral("新建动画方案")); } else { setWindowTitle(QStringLiteral("动画方案设置")); } auto* root = new QVBoxLayout(this); root->setContentsMargins(12, 12, 12, 12); auto* form = new QFormLayout(); form->setSpacing(8); root->addLayout(form); m_name = new QLineEdit(this); m_name->setPlaceholderText(QStringLiteral("显示名称")); form->addRow(QStringLiteral("名称"), m_name); m_frames = new QSpinBox(this); m_frames->setRange(1, 1000000); m_frames->setValue(600); form->addRow(QStringLiteral("总帧数"), m_frames); m_fps = new QSpinBox(this); m_fps->setRange(1, 240); m_fps->setValue(std::max(1, m_workspace.project().fps())); form->addRow(QStringLiteral("帧率"), m_fps); m_loop = new QCheckBox(QStringLiteral("循环播放"), this); m_loop->setChecked(true); form->addRow(QString(), m_loop); auto* box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); root->addWidget(box); connect(box, &QDialogButtonBox::accepted, this, &AnimationSchemeSettingsDialog::accept); connect(box, &QDialogButtonBox::rejected, this, &QDialog::reject); } void AnimationSchemeSettingsDialog::setEditTarget(const QString& animationId) { m_editId = animationId; if (const core::Project::Animation* a = m_workspace.project().findAnimationById(animationId)) { m_name->setText(a->name); m_frames->setValue(std::max(1, a->lengthFrames)); m_fps->setValue(std::max(1, a->fps)); m_loop->setChecked(a->loop); } } void AnimationSchemeSettingsDialog::accept() { const QString nm = m_name->text().trimmed(); const int frames = m_frames->value(); const int fps = m_fps->value(); const bool loop = m_loop->isChecked(); if (m_mode == Mode::Create) { if (!m_workspace.createAnimationScheme(nm, frames, loop, fps, &m_createdNewId)) { QMessageBox::warning(this, windowTitle(), QStringLiteral("新建失败")); return; } } else { if (m_editId.isEmpty() || !m_workspace.project().findAnimationById(m_editId)) { QMessageBox::warning(this, windowTitle(), QStringLiteral("无效的动画方案")); return; } if (!m_workspace.updateAnimationSchemeSettings(m_editId, nm, frames, loop, fps)) { QMessageBox::warning(this, windowTitle(), QStringLiteral("保存失败")); return; } } QDialog::accept(); }