diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-10-15 01:32:00 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-10-15 23:24:56 +0200 |
| commit | 8df0d52eb09043ac9f156f2886123a4888911d57 (patch) | |
| tree | 88d0b151dbac83beb276d8edf732f2f3dc8c414d | |
| parent | 589a866b05ee0d9d27f83d37e10a1025c406951d (diff) | |
Make filters option respect OK/Cancel.
| -rw-r--r-- | src/wx/content_advanced_dialog.cc | 31 | ||||
| -rw-r--r-- | src/wx/content_advanced_dialog.h | 5 | ||||
| -rw-r--r-- | src/wx/content_menu.cc | 5 |
3 files changed, 26 insertions, 15 deletions
diff --git a/src/wx/content_advanced_dialog.cc b/src/wx/content_advanced_dialog.cc index 1a2a8b6a3..21cba5e8a 100644 --- a/src/wx/content_advanced_dialog.cc +++ b/src/wx/content_advanced_dialog.cc @@ -30,6 +30,7 @@ #include "lib/filter.h" #include "lib/ffmpeg_content.h" #include "lib/image_content.h" +#include "lib/scope_guard.h" #include "lib/video_content.h" #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS @@ -114,6 +115,12 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptr<Conte _ignore_video->Enable(static_cast<bool>(_content->video)); _ignore_video->SetValue(_content->video ? !content->video->use() : false); + + auto fcs = dynamic_pointer_cast<FFmpegContent>(content); + _filters_allowed = static_cast<bool>(fcs); + if (fcs) { + _filters_list = fcs->filters(); + } setup_filters (); bool const single_frame_image_content = dynamic_pointer_cast<const ImageContent>(_content) && _content->number_of_paths() == 1; @@ -148,15 +155,14 @@ ContentAdvancedDialog::ignore_video() const void ContentAdvancedDialog::setup_filters () { - auto fcs = dynamic_pointer_cast<FFmpegContent>(_content); - if (!fcs) { + if (!_filters_allowed) { checked_set (_filters, _("None")); _filters->Enable (false); _filters_button->Enable (false); return; } - auto p = Filter::ffmpeg_string (fcs->filters()); + auto p = Filter::ffmpeg_string(_filters_list); if (p.empty()) { checked_set (_filters, _("None")); } else { @@ -171,27 +177,22 @@ ContentAdvancedDialog::setup_filters () void ContentAdvancedDialog::edit_filters () { - auto fcs = dynamic_pointer_cast<FFmpegContent>(_content); - if (!fcs) { + if (!_filters_allowed) { return; } - auto d = new FilterDialog (this, fcs->filters()); - d->ActiveChanged.connect (bind(&ContentAdvancedDialog::filters_changed, this, _1)); - d->ShowModal (); - d->Destroy (); + auto dialog = new FilterDialog(this, _filters_list); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; + + dialog->ActiveChanged.connect(bind(&ContentAdvancedDialog::filters_changed, this, _1)); + dialog->ShowModal(); } void ContentAdvancedDialog::filters_changed (vector<Filter const *> filters) { - auto fcs = dynamic_pointer_cast<FFmpegContent>(_content); - if (!fcs) { - return; - } - - fcs->set_filters (filters); + _filters_list = filters; setup_filters (); } diff --git a/src/wx/content_advanced_dialog.h b/src/wx/content_advanced_dialog.h index b765fa9fb..26c1a374a 100644 --- a/src/wx/content_advanced_dialog.h +++ b/src/wx/content_advanced_dialog.h @@ -38,6 +38,9 @@ public: ContentAdvancedDialog (wxWindow* parent, std::shared_ptr<Content> content); bool ignore_video() const; + std::vector<Filter const*> filters() { + return _filters_list; + } private: void edit_filters (); @@ -50,6 +53,8 @@ private: void burnt_subtitle_language_changed (); std::shared_ptr<Content> _content; + bool _filters_allowed = false; + std::vector<Filter const*> _filters_list; wxStaticText* _filters; wxButton* _filters_button; diff --git a/src/wx/content_menu.cc b/src/wx/content_menu.cc index 9ef674fd1..6e903397d 100644 --- a/src/wx/content_menu.cc +++ b/src/wx/content_menu.cc @@ -475,6 +475,11 @@ ContentMenu::advanced () if (content->video) { content->video->set_use(!dialog->ignore_video()); } + + auto ffmpeg = dynamic_pointer_cast<FFmpegContent>(content); + if (ffmpeg) { + ffmpeg->set_filters(dialog->filters()); + } } |
