diff --git a/app/src/exportmoviedialog.cpp b/app/src/exportmoviedialog.cpp index 5212942e9..8b7c1f910 100644 --- a/app/src/exportmoviedialog.cpp +++ b/app/src/exportmoviedialog.cpp @@ -31,7 +31,17 @@ ExportMovieDialog::ExportMovieDialog(QWidget *parent, Mode mode, FileType fileTy } else { setWindowTitle(tr("Export Movie")); } + + QSizePolicy policy = ui->unevenWidthLabel->sizePolicy(); + policy.setRetainSizeWhenHidden(true); + ui->unevenWidthLabel->setSizePolicy(policy); + policy = ui->unevenHeightLabel->sizePolicy(); + policy.setRetainSizeWhenHidden(true); + ui->unevenHeightLabel->setSizePolicy(policy); + connect(this, &ExportMovieDialog::filePathsChanged, this, &ExportMovieDialog::onFilePathsChanged); + connect(ui->widthSpinBox, static_cast(&QSpinBox::valueChanged), this, &ExportMovieDialog::validateResolution); + connect(ui->heightSpinBox, static_cast(&QSpinBox::valueChanged), this, &ExportMovieDialog::validateResolution); } ExportMovieDialog::~ExportMovieDialog() @@ -66,6 +76,7 @@ void ExportMovieDialog::updateResolutionCombo( int index ) ui->widthSpinBox->setValue( camSize.width() ); ui->heightSpinBox->setValue( camSize.height() ); + validateResolution(); } void ExportMovieDialog::setDefaultRange(int startFrame, int endFrame, int endFrameWithSounds) @@ -128,6 +139,7 @@ void ExportMovieDialog::onFilePathsChanged(QStringList filePaths) ui->loopCheckBox->setChecked(false); } ui->transparencyCheckBox->setEnabled(supportsTransparency(filePath)); + validateResolution(); } bool ExportMovieDialog::supportsLooping(QString filePath) const @@ -141,3 +153,13 @@ bool ExportMovieDialog::supportsTransparency(QString filePath) const return filePath.endsWith(".apng", Qt::CaseInsensitive) || filePath.endsWith(".webm", Qt::CaseInsensitive); } + +void ExportMovieDialog::validateResolution() +{ + const bool isMp4 = getFilePath().endsWith(".mp4", Qt::CaseInsensitive); + const bool widthValid = !isMp4 || ui->widthSpinBox->value() % 2 == 0; + const bool heightValid = !isMp4 || ui->heightSpinBox->value() % 2 == 0; + ui->unevenWidthLabel->setHidden(widthValid); + ui->unevenHeightLabel->setHidden(heightValid); + setOkButtonEnabled(widthValid && heightValid); +} diff --git a/app/src/exportmoviedialog.h b/app/src/exportmoviedialog.h index 0ac2d4920..58ce30720 100644 --- a/app/src/exportmoviedialog.h +++ b/app/src/exportmoviedialog.h @@ -54,6 +54,7 @@ class ExportMovieDialog : public ImportExportDialog bool supportsLooping(QString filePath) const; bool supportsTransparency(QString filePath) const; + void validateResolution(); int mEndFrameWithSounds = 0; int mEndFrame = 0; diff --git a/app/src/importexportdialog.cpp b/app/src/importexportdialog.cpp index 142416c2c..f552d08c9 100644 --- a/app/src/importexportdialog.cpp +++ b/app/src/importexportdialog.cpp @@ -71,6 +71,11 @@ void ImportExportDialog::setInstructionsLabel(const QString& text) ui->instructionsLabel->setText(text); } +void ImportExportDialog::setOkButtonEnabled(const bool enabled) +{ + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enabled); +} + void ImportExportDialog::init() { switch (mMode) diff --git a/app/src/importexportdialog.h b/app/src/importexportdialog.h index 93b8fce8c..0f17499df 100644 --- a/app/src/importexportdialog.h +++ b/app/src/importexportdialog.h @@ -58,6 +58,7 @@ class ImportExportDialog : public QDialog void hideInstructionsLabel(bool hide); void setInstructionsLabel(const QString& text); + void setOkButtonEnabled(bool enabled); private slots: void browse(); diff --git a/app/ui/exportmovieoptions.ui b/app/ui/exportmovieoptions.ui index 3e4ef4774..e09af31bf 100644 --- a/app/ui/exportmovieoptions.ui +++ b/app/ui/exportmovieoptions.ui @@ -40,7 +40,7 @@ Resolution - + @@ -60,6 +60,16 @@ + + + + The MP4 format does not support odd width. Please specify an even width or use a different file format. + + + + + + @@ -89,6 +99,16 @@ + + + + The MP4 format does not support odd height. Please specify an even height or use a different file format. + + + + + +