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 /src/wx/content_advanced_dialog.cc | |
| parent | d3dbe752a3098328d5763f3fc0fd589bac0d5047 (diff) | |
Move video filters controls into advanced content dialogue (#1748).
Diffstat (limited to 'src/wx/content_advanced_dialog.cc')
| -rw-r--r-- | src/wx/content_advanced_dialog.cc | 81 |
1 files changed, 81 insertions, 0 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 (); +} + |
