X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_advanced_dialog.cc;h=79e6da9fad76957bd9ba7bbd870aeb8e4e86c958;hb=746e298e214a65ca9151867b2948560e76b45546;hp=c97047c737c164487e9c68ae916ee5281cdb0e6f;hpb=d9ab996fa416ba27b69bb65f047a1a1aa4063f1b;p=dcpomatic.git diff --git a/src/wx/content_advanced_dialog.cc b/src/wx/content_advanced_dialog.cc index c97047c73..79e6da9fa 100644 --- a/src/wx/content_advanced_dialog.cc +++ b/src/wx/content_advanced_dialog.cc @@ -18,28 +18,71 @@ */ + #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) - : TableDialog (parent, _("Advanced content settings"), 2, 0, false) + : wxDialog (parent, wxID_ANY, _("Advanced content settings")) , _content (content) { + 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")); - add (ignore_video); - add_spacer (); + sizer->Add (ignore_video, wxGBPosition(r, 0), wxGBSpan(1, 2)); + ++r; + + wxSizer* overall = new wxBoxSizer (wxVERTICAL); + overall->Add (sizer, 1, wxALL, DCPOMATIC_DIALOG_BORDER); + wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); + if (buttons) { + overall->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } - layout (); + SetSizerAndFit (overall); ignore_video->Enable (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)); } @@ -52,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 (); +} +