From 8df0d52eb09043ac9f156f2886123a4888911d57 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 15 Oct 2022 01:32:00 +0200 Subject: [PATCH] Make filters option respect OK/Cancel. --- src/wx/content_advanced_dialog.cc | 31 ++++++++++++++++--------------- src/wx/content_advanced_dialog.h | 5 +++++ 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 LIBDCP_DISABLE_WARNINGS @@ -114,6 +115,12 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrEnable(static_cast(_content->video)); _ignore_video->SetValue(_content->video ? !content->video->use() : false); + + auto fcs = dynamic_pointer_cast(content); + _filters_allowed = static_cast(fcs); + if (fcs) { + _filters_list = fcs->filters(); + } setup_filters (); bool const single_frame_image_content = dynamic_pointer_cast(_content) && _content->number_of_paths() == 1; @@ -148,15 +155,14 @@ ContentAdvancedDialog::ignore_video() const void ContentAdvancedDialog::setup_filters () { - auto fcs = dynamic_pointer_cast(_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(_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 filters) { - auto fcs = dynamic_pointer_cast(_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); bool ignore_video() const; + std::vector filters() { + return _filters_list; + } private: void edit_filters (); @@ -50,6 +53,8 @@ private: void burnt_subtitle_language_changed (); std::shared_ptr _content; + bool _filters_allowed = false; + std::vector _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(content); + if (ffmpeg) { + ffmpeg->set_filters(dialog->filters()); + } } -- 2.30.2