diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-06-27 23:08:42 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-06-27 23:12:46 +0200 |
| commit | 76fa6543691330bcbf911ab77b2e1133fb70ada7 (patch) | |
| tree | 564057692264035aeff003834cc518e3057fb64e | |
| parent | d3dbe752a3098328d5763f3fc0fd589bac0d5047 (diff) | |
Move video filters controls into advanced content dialogue (#1748).
| -rw-r--r-- | src/wx/content_advanced_dialog.cc | 81 | ||||
| -rw-r--r-- | src/wx/content_advanced_dialog.h | 8 | ||||
| -rw-r--r-- | src/wx/video_panel.cc | 47 | ||||
| -rw-r--r-- | src/wx/video_panel.h | 4 |
4 files changed, 89 insertions, 51 deletions
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 <wx/gbsizer.h> #include <boost/bind.hpp> + +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> content) : wxDialog (parent, wxID_ANY, _("Advanced content settings")) , _content (content) @@ -35,6 +47,23 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptr<Conte wxGridBagSizer* sizer = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); int r = 0; + + wxClientDC dc (this); + wxSize size = dc.GetTextExtent (wxT ("A quite long name")); +#ifdef __WXGTK3__ + size.SetWidth (size.GetWidth() + 64); +#endif + size.SetHeight (-1); + + add_label_to_sizer (sizer, this, _("Video filters"), true, wxGBPosition(r, 0)); + _filters = new StaticText (this, _("None"), wxDefaultPosition, size); + _filters_button = new Button (this, _("Edit...")); + wxBoxSizer* filters = new wxBoxSizer (wxHORIZONTAL); + filters->Add (_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_ptr<Conte ignore_video->Enable (static_cast<bool>(_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<FFmpegContent> fcs = dynamic_pointer_cast<FFmpegContent>(_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<FFmpegContent> fcs = dynamic_pointer_cast<FFmpegContent>(_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<Filter const *> filters) +{ + shared_ptr<FFmpegContent> fcs = dynamic_pointer_cast<FFmpegContent>(_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 <wx/wx.h> #include <boost/shared_ptr.hpp> +#include <vector> 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<Filter const *> filters); + void setup_filters (); boost::shared_ptr<Content> _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; |
