ScreenRecorder: Remember the last used export format

Requires unique format names, thus the lossy WebP is now "WebP/VP8".
Default export format is WebP (lossless).

Change-Id: I26ccfb86417787d300afbb986c8202713ab1cbba
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Alessandro Portale
2023-09-21 18:14:17 +02:00
parent 9503f62f49
commit 5d4849f058
3 changed files with 15 additions and 3 deletions

View File

@@ -51,7 +51,7 @@ static const QVector<ExportWidget::Format> &formats()
{ {
ExportWidget::Format::AnimatedImage, ExportWidget::Format::AnimatedImage,
ExportWidget::Format::Lossy, ExportWidget::Format::Lossy,
"WebP", "WebP/VP8",
".webp", ".webp",
{ {
"-pix_fmt", "yuv420p", "-pix_fmt", "yuv420p",
@@ -148,11 +148,17 @@ ExportWidget::ExportWidget(QWidget *parent)
connect(exportButton, &QToolButton::clicked, this, [this] { connect(exportButton, &QToolButton::clicked, this, [this] {
FilePathAspect &lastDir = Internal::settings().exportLastDirectory; FilePathAspect &lastDir = Internal::settings().exportLastDirectory;
QString selectedFilter; StringAspect &lastFormat = Internal::settings().exportLastFormat;
const Format &defaultFormat = formats().at(1);
QTC_CHECK(defaultFormat.displayName == lastFormat.defaultValue());
QString selectedFilter = findOr(formats(), defaultFormat,
[&lastFormat] (const Format &f) {
return f.displayName == lastFormat();
}).fileDialogFilter();
FilePath file = FileUtils::getSaveFilePath(nullptr, Tr::tr("Save as"), lastDir(), FilePath file = FileUtils::getSaveFilePath(nullptr, Tr::tr("Save as"), lastDir(),
fileDialogFilters(), &selectedFilter); fileDialogFilters(), &selectedFilter);
if (!file.isEmpty()) { if (!file.isEmpty()) {
m_currentFormat = findOr(formats(), formats().first(), m_currentFormat = findOr(formats(), defaultFormat,
[&selectedFilter] (const Format &fp) { [&selectedFilter] (const Format &fp) {
return fp.fileDialogFilter() == selectedFilter; return fp.fileDialogFilter() == selectedFilter;
}); });
@@ -161,6 +167,8 @@ ExportWidget::ExportWidget(QWidget *parent)
m_outputClipInfo.file = file; m_outputClipInfo.file = file;
lastDir.setValue(file.parentDir()); lastDir.setValue(file.parentDir());
lastDir.writeToSettingsImmediatly(); lastDir.writeToSettingsImmediatly();
lastFormat.setValue(m_currentFormat.displayName);
lastFormat.writeToSettingsImmediatly();
startExport(); startExport();
} }
}); });

View File

@@ -118,6 +118,9 @@ ScreenRecorderSettings::ScreenRecorderSettings()
exportLastDirectory.setExpectedKind(PathChooser::ExistingDirectory); exportLastDirectory.setExpectedKind(PathChooser::ExistingDirectory);
exportLastDirectory.setDefaultValue(FileUtils::homePath().toString()); exportLastDirectory.setDefaultValue(FileUtils::homePath().toString());
exportLastFormat.setSettingsKey("ExportLastFormat");
exportLastFormat.setDefaultValue("WebP");
lastSaveImageDirectory.setSettingsKey("LastSaveImageDir"); lastSaveImageDirectory.setSettingsKey("LastSaveImageDir");
lastSaveImageDirectory.setExpectedKind(PathChooser::ExistingDirectory); lastSaveImageDirectory.setExpectedKind(PathChooser::ExistingDirectory);
lastSaveImageDirectory.setDefaultValue(FileUtils::homePath().toString()); lastSaveImageDirectory.setDefaultValue(FileUtils::homePath().toString());

View File

@@ -38,6 +38,7 @@ public:
// Used in other places // Used in other places
Utils::FilePathAspect lastOpenDirectory{this}; Utils::FilePathAspect lastOpenDirectory{this};
Utils::FilePathAspect exportLastDirectory{this}; Utils::FilePathAspect exportLastDirectory{this};
Utils::StringAspect exportLastFormat{this};
Utils::FilePathAspect lastSaveImageDirectory{this}; Utils::FilePathAspect lastSaveImageDirectory{this};
Utils::IntegerAspect recordFrameRate{this}; Utils::IntegerAspect recordFrameRate{this};
Utils::IntegerAspect recordScreenId{this}; Utils::IntegerAspect recordScreenId{this};