diff --git a/app/dialog/sequence/presetmanager.h b/app/dialog/sequence/presetmanager.h index 7b6425002..3ed913026 100644 --- a/app/dialog/sequence/presetmanager.h +++ b/app/dialog/sequence/presetmanager.h @@ -63,6 +63,8 @@ private: }; +using PresetPtr = std::shared_ptr; + template class PresetManager { @@ -80,7 +82,7 @@ public: if (reader.name() == QStringLiteral("presets")) { while (XMLReadNextStartElement(&reader)) { if (reader.name() == QStringLiteral("preset")) { - Preset* p = new T(); + PresetPtr p = std::make_unique(); p->Load(&reader); @@ -110,7 +112,7 @@ public: writer.writeStartElement(QStringLiteral("presets")); - foreach (Preset* p, custom_preset_data_) { + foreach (PresetPtr p, custom_preset_data_) { writer.writeStartElement(QStringLiteral("preset")); p->Save(&writer); @@ -124,8 +126,6 @@ public: preset_file.close(); } - - qDeleteAll(custom_preset_data_); } QString GetPresetName(QString start) const @@ -159,7 +159,13 @@ public: return start; } - bool SavePreset(Preset* preset) + enum SaveStatus { + kAppended, + kReplaced, + kNotSaved + }; + + SaveStatus SavePreset(PresetPtr preset) { QString preset_name; int existing_preset; @@ -169,7 +175,7 @@ public: if (preset_name.isEmpty()) { // Dialog cancelled - leave function entirely - return false; + return kNotSaved; } existing_preset = -1; @@ -194,10 +200,10 @@ public: if (existing_preset >= 0) { custom_preset_data_.replace(existing_preset, preset); - return false; + return kReplaced; } else { custom_preset_data_.append(preset); - return true; + return kAppended; } } @@ -206,7 +212,7 @@ public: return QDir(FileFunctions::GetConfigurationLocation()).filePath(preset_name_); } - Preset* GetPreset(int index) + PresetPtr GetPreset(int index) { return custom_preset_data_.at(index); } @@ -221,13 +227,13 @@ public: return custom_preset_data_.size(); } - const QVector& GetPresetData() const + const QVector& GetPresetData() const { return custom_preset_data_; } private: - QVector custom_preset_data_; + QVector custom_preset_data_; QString preset_name_; diff --git a/app/dialog/sequence/sequencedialogpresettab.cpp b/app/dialog/sequence/sequencedialogpresettab.cpp index f557a6356..a52258fa0 100644 --- a/app/dialog/sequence/sequencedialogpresettab.cpp +++ b/app/dialog/sequence/sequencedialogpresettab.cpp @@ -79,19 +79,13 @@ SequenceDialogPresetTab::SequenceDialogPresetTab(QWidget* parent) : } } -SequenceDialogPresetTab::~SequenceDialogPresetTab() -{ - qDeleteAll(default_preset_data_); -} - void SequenceDialogPresetTab::SaveParametersAsPreset(SequencePreset preset) { - Preset* preset_ptr = new SequencePreset(preset); + PresetPtr preset_ptr = std::make_shared(preset); - if (SavePreset(preset_ptr)) { + // If replaced, no need to make another item. If not saved, shared ptr will delete itself + if (SavePreset(preset_ptr) == kAppended) { AddCustomItem(my_presets_folder_, preset_ptr, GetNumberOfPresets() - 1); - } else { - delete preset_ptr; } } @@ -108,7 +102,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateHDPresetFolder(const QString &na const VideoParams::Format default_format = static_cast(Config::Current()["OfflinePixelFormat"].toInt()); const bool default_autocache = Config::Current()[QStringLiteral("DefaultSequenceAutoCache")].toBool(); QTreeWidgetItem* parent = CreateFolder(name); - AddStandardItem(parent, new SequencePreset(tr("%1 23.976 FPS").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 23.976 FPS").arg(name), width, height, rational(24000, 1001), @@ -119,7 +113,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateHDPresetFolder(const QString &na divider, default_format, default_autocache)); - AddStandardItem(parent, new SequencePreset(tr("%1 25 FPS").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 25 FPS").arg(name), width, height, rational(25, 1), @@ -130,7 +124,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateHDPresetFolder(const QString &na divider, default_format, default_autocache)); - AddStandardItem(parent, new SequencePreset(tr("%1 29.97 FPS").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 29.97 FPS").arg(name), width, height, rational(30000, 1001), @@ -141,7 +135,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateHDPresetFolder(const QString &na divider, default_format, default_autocache)); - AddStandardItem(parent, new SequencePreset(tr("%1 50 FPS").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 50 FPS").arg(name), width, height, rational(50, 1), @@ -152,7 +146,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateHDPresetFolder(const QString &na divider, default_format, default_autocache)); - AddStandardItem(parent, new SequencePreset(tr("%1 59.94 FPS").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 59.94 FPS").arg(name), width, height, rational(60000, 1001), @@ -172,7 +166,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateSDPresetFolder(const QString &na const bool default_autocache = Config::Current()[QStringLiteral("DefaultSequenceAutoCache")].toBool(); QTreeWidgetItem* parent = CreateFolder(name); preset_tree_->addTopLevelItem(parent); - AddStandardItem(parent, new SequencePreset(tr("%1 Standard").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 Standard").arg(name), width, height, frame_rate, @@ -183,7 +177,7 @@ QTreeWidgetItem *SequenceDialogPresetTab::CreateSDPresetFolder(const QString &na divider, default_format, default_autocache)); - AddStandardItem(parent, new SequencePreset(tr("%1 Widescreen").arg(name), + AddStandardItem(parent, std::make_shared(tr("%1 Widescreen").arg(name), width, height, frame_rate, @@ -221,19 +215,19 @@ QTreeWidgetItem *SequenceDialogPresetTab::GetSelectedCustomPreset() return nullptr; } -void SequenceDialogPresetTab::AddStandardItem(QTreeWidgetItem *folder, Preset* preset, const QString& description) +void SequenceDialogPresetTab::AddStandardItem(QTreeWidgetItem *folder, PresetPtr preset, const QString& description) { int index = default_preset_data_.size(); default_preset_data_.append(preset); AddItemInternal(folder, preset, false, index, description); } -void SequenceDialogPresetTab::AddCustomItem(QTreeWidgetItem *folder, Preset* preset, int index, const QString &description) +void SequenceDialogPresetTab::AddCustomItem(QTreeWidgetItem *folder, PresetPtr preset, int index, const QString &description) { AddItemInternal(folder, preset, true, index, description); } -void SequenceDialogPresetTab::AddItemInternal(QTreeWidgetItem *folder, Preset* preset, bool is_custom, int index, const QString &description) +void SequenceDialogPresetTab::AddItemInternal(QTreeWidgetItem *folder, PresetPtr preset, bool is_custom, int index, const QString &description) { QTreeWidgetItem* item = new QTreeWidgetItem(); @@ -254,11 +248,11 @@ void SequenceDialogPresetTab::SelectedItemChanged(QTreeWidgetItem* current, QTre if (current->data(0, kDataIsPreset).toBool()) { int preset_index = current->data(0, kDataPresetDataRole).toInt(); - Preset* preset_data = (current->data(0, kDataPresetIsCustomRole).toBool()) + PresetPtr preset_data = (current->data(0, kDataPresetIsCustomRole).toBool()) ? GetPreset(preset_index) : default_preset_data_.at(preset_index); - emit PresetChanged(*static_cast(preset_data)); + emit PresetChanged(*static_cast(preset_data.get())); } } diff --git a/app/dialog/sequence/sequencedialogpresettab.h b/app/dialog/sequence/sequencedialogpresettab.h index f96a466ed..bd2e334a3 100644 --- a/app/dialog/sequence/sequencedialogpresettab.h +++ b/app/dialog/sequence/sequencedialogpresettab.h @@ -36,8 +36,6 @@ class SequenceDialogPresetTab : public QWidget, public PresetManager default_preset_data_; + QVector default_preset_data_; private slots: void SelectedItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);