From: Carl Hetherington Date: Sat, 27 Jun 2020 21:08:42 +0000 (+0200) Subject: Move video filters controls into advanced content dialogue (#1748). X-Git-Tag: v2.15.85~5 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=76fa6543691330bcbf911ab77b2e1133fb70ada7 Move video filters controls into advanced content dialogue (#1748). --- diff --git a/src/wx/content_advanced_dialog.cc b/src/wx/content_advanced_dialog.cc index 4b13a67d2..79e6da9fa 100644 --- a/src/wx/content_advanced_dialog.cc +++ b/src/wx/content_advanced_dialog.cc @@ -18,16 +18,28 @@ */ + #include "content_advanced_dialog.h" +#include "dcpomatic_button.h" +#include "filter_dialog.h" +#include "static_text.h" #include "wx_util.h" #include "lib/content.h" +#include "lib/filter.h" +#include "lib/ffmpeg_content.h" #include "lib/video_content.h" #include #include + +using std::string; +using std::vector; using boost::bind; +using boost::dynamic_pointer_cast; using boost::shared_ptr; + + ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptr content) : wxDialog (parent, wxID_ANY, _("Advanced content settings")) , _content (content) @@ -35,6 +47,23 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrAdd (_filters, 1, wxALL | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); + filters->Add (_filters_button, 0, wxALL, DCPOMATIC_SIZER_GAP); + sizer->Add (filters, wxGBPosition(r, 1)); + ++r; + wxCheckBox* ignore_video = new wxCheckBox (this, wxID_ANY, _("Ignore this content's video and use only audio, subtitles and closed captions")); sizer->Add (ignore_video, wxGBPosition(r, 0), wxGBSpan(1, 2)); ++r; @@ -50,8 +79,10 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrEnable (static_cast(_content->video)); ignore_video->SetValue (_content->video ? !content->video->use() : false); + setup_filters (); ignore_video->Bind (wxEVT_CHECKBOX, bind(&ContentAdvancedDialog::ignore_video_changed, this, _1)); + _filters_button->Bind (wxEVT_BUTTON, bind(&ContentAdvancedDialog::edit_filters, this)); } @@ -64,3 +95,53 @@ ContentAdvancedDialog::ignore_video_changed (wxCommandEvent& ev) } +void +ContentAdvancedDialog::setup_filters () +{ + shared_ptr fcs = dynamic_pointer_cast(_content); + if (!fcs) { + checked_set (_filters, _("None")); + _filters->Enable (false); + _filters_button->Enable (false); + return; + } + + string p = Filter::ffmpeg_string (fcs->filters()); + if (p.empty()) { + checked_set (_filters, _("None")); + } else { + if (p.length() > 25) { + p = p.substr(0, 25) + "..."; + } + checked_set (_filters, p); + } +} + + +void +ContentAdvancedDialog::edit_filters () +{ + shared_ptr fcs = dynamic_pointer_cast(_content); + if (!fcs) { + return; + } + + FilterDialog* d = new FilterDialog (this, fcs->filters()); + d->ActiveChanged.connect (bind(&ContentAdvancedDialog::filters_changed, this, _1)); + d->ShowModal (); + d->Destroy (); +} + + +void +ContentAdvancedDialog::filters_changed (vector filters) +{ + shared_ptr fcs = dynamic_pointer_cast(_content); + if (!fcs) { + return; + } + + fcs->set_filters (filters); + setup_filters (); +} + diff --git a/src/wx/content_advanced_dialog.h b/src/wx/content_advanced_dialog.h index 5fec35412..ba5d0c6fd 100644 --- a/src/wx/content_advanced_dialog.h +++ b/src/wx/content_advanced_dialog.h @@ -21,9 +21,11 @@ #include #include +#include class Content; +class Filter; class ContentAdvancedDialog : public wxDialog @@ -33,7 +35,13 @@ public: private: void ignore_video_changed (wxCommandEvent& ev); + void edit_filters (); + void filters_changed (std::vector filters); + void setup_filters (); boost::shared_ptr _content; + + wxStaticText* _filters; + wxButton* _filters_button; }; diff --git a/src/wx/video_panel.cc b/src/wx/video_panel.cc index ac744ddc9..a2aa6f234 100644 --- a/src/wx/video_panel.cc +++ b/src/wx/video_panel.cc @@ -159,10 +159,6 @@ VideoPanel::VideoPanel (ContentPanel* p) _scale_custom = new wxRadioButton (this, wxID_ANY, _("custom")); _scale_custom_edit = new Button (this, _("Edit...")); - _filters_label = create_label (this, _("Filters"), true); - _filters = new StaticText (this, _("None"), wxDefaultPosition, size); - _filters_button = new Button (this, _("Edit...")); - _colour_conversion_label = create_label (this, _("Colour conversion"), true); _colour_conversion = new wxChoice (this, wxID_ANY, wxDefaultPosition, size); _colour_conversion->Append (_("None")); @@ -201,7 +197,6 @@ VideoPanel::VideoPanel (ContentPanel* p) _fade_out->Changed.connect (boost::bind (&VideoPanel::fade_out_changed, this)); _reference->Bind (wxEVT_CHECKBOX, boost::bind (&VideoPanel::reference_clicked, this)); - _filters_button->Bind (wxEVT_BUTTON, boost::bind (&VideoPanel::edit_filters_clicked, this)); _scale_fit->Bind (wxEVT_RADIOBUTTON, boost::bind (&VideoPanel::scale_fit_clicked, this)); _scale_custom->Bind (wxEVT_RADIOBUTTON, boost::bind (&VideoPanel::scale_custom_clicked, this)); _scale_custom_edit->Bind (wxEVT_BUTTON, boost::bind (&VideoPanel::scale_custom_edit_clicked, this)); @@ -271,9 +266,6 @@ VideoPanel::add_to_grid () _scale_fit->Show (full); _scale_custom->Show (full); _scale_custom_edit->Show (full); - _filters_label->Show (full); - _filters->Show (full); - _filters_button->Show (full); _colour_conversion_label->Show (full); _colour_conversion->Show (full); _edit_colour_conversion_button->Show (full); @@ -301,15 +293,6 @@ VideoPanel::add_to_grid () } ++r; - add_label_to_sizer (_grid, _filters_label, true, wxGBPosition (r, 0)); - { - wxSizer* s = new wxBoxSizer (wxHORIZONTAL); - s->Add (_filters, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM | wxRIGHT, 6); - s->Add (_filters_button, 0, wxALIGN_CENTER_VERTICAL); - _grid->Add (s, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - } - ++r; - add_label_to_sizer (_grid, _colour_conversion_label, true, wxGBPosition(r, 0)); { wxSizer* s = new wxBoxSizer (wxHORIZONTAL); @@ -430,18 +413,6 @@ VideoPanel::film_content_changed (int property) setup_sensitivity (); - } else if (property == FFmpegContentProperty::FILTERS) { - if (fcs) { - string p = Filter::ffmpeg_string (fcs->filters ()); - if (p.empty ()) { - checked_set (_filters, _("None")); - } else { - if (p.length() > 25) { - p = p.substr (0, 25) + "..."; - } - checked_set (_filters, p); - } - } } else if (property == VideoContentProperty::USE) { setup_sensitivity (); } else if (property == VideoContentProperty::FADE_IN) { @@ -506,20 +477,6 @@ VideoPanel::film_content_changed (int property) } } -/** Called when the `Edit filters' button has been clicked */ -void -VideoPanel::edit_filters_clicked () -{ - FFmpegContentList c = _parent->selected_ffmpeg (); - if (c.size() != 1) { - return; - } - - FilterDialog* d = new FilterDialog (this, c.front()->filters()); - d->ActiveChanged.connect (bind (&FFmpegContent::set_filters, c.front(), _1)); - d->ShowModal (); - d->Destroy (); -} void VideoPanel::setup_description () @@ -650,8 +607,6 @@ VideoPanel::setup_sensitivity () _scale_custom->Enable (false); _scale_custom_edit->Enable (false); _description->Enable (false); - _filters->Enable (false); - _filters_button->Enable (false); _colour_conversion->Enable (false); _range->Enable (false); } else { @@ -670,8 +625,6 @@ VideoPanel::setup_sensitivity () _scale_custom->Enable (true); _scale_custom_edit->Enable (_scale_custom->GetValue()); _description->Enable (true); - _filters->Enable (true); - _filters_button->Enable (single && !ffmpeg_sel.empty ()); _colour_conversion->Enable (!video_sel.empty()); _range->Enable (single && !video_sel.empty()); } diff --git a/src/wx/video_panel.h b/src/wx/video_panel.h index b74318f2f..2304e5e0b 100644 --- a/src/wx/video_panel.h +++ b/src/wx/video_panel.h @@ -47,7 +47,6 @@ public: private: void reference_clicked (); - void edit_filters_clicked (); void colour_conversion_changed (); void edit_colour_conversion_clicked (); void range_changed (); @@ -91,9 +90,6 @@ private: wxRadioButton* _scale_custom; wxButton* _scale_custom_edit; wxStaticText* _description; - wxStaticText* _filters_label; - wxStaticText* _filters; - wxButton* _filters_button; wxStaticText* _colour_conversion_label; wxChoice* _colour_conversion; wxButton* _edit_colour_conversion_button;