Move video filters controls into advanced content dialogue (#1748).
authorCarl Hetherington <cth@carlh.net>
Sat, 27 Jun 2020 21:08:42 +0000 (23:08 +0200)
committerCarl Hetherington <cth@carlh.net>
Sat, 27 Jun 2020 21:12:46 +0000 (23:12 +0200)
src/wx/content_advanced_dialog.cc
src/wx/content_advanced_dialog.h
src/wx/video_panel.cc
src/wx/video_panel.h

index 4b13a67d2cc74570ca64480886adab6e0f4146d0..79e6da9fad76957bd9ba7bbd870aeb8e4e86c958 100644 (file)
 
 */
 
 
 */
 
+
 #include "content_advanced_dialog.h"
 #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 "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>
 
 #include "lib/video_content.h"
 #include <wx/gbsizer.h>
 #include <boost/bind.hpp>
 
+
+using std::string;
+using std::vector;
 using boost::bind;
 using boost::bind;
+using boost::dynamic_pointer_cast;
 using boost::shared_ptr;
 
 using boost::shared_ptr;
 
+
+
 ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptr<Content> content)
        : wxDialog (parent, wxID_ANY, _("Advanced content settings"))
        , _content (content)
 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;
        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;
        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);
 
        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));
 
        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 ();
+}
+
index 5fec35412cecd26403427421b4088e9d5e2d0016..ba5d0c6fd02fda64765d6badc85fae4dc39e0614 100644 (file)
 
 #include <wx/wx.h>
 #include <boost/shared_ptr.hpp>
 
 #include <wx/wx.h>
 #include <boost/shared_ptr.hpp>
+#include <vector>
 
 
 class Content;
 
 
 class Content;
+class Filter;
 
 
 class ContentAdvancedDialog : public wxDialog
 
 
 class ContentAdvancedDialog : public wxDialog
@@ -33,7 +35,13 @@ public:
 
 private:
        void ignore_video_changed (wxCommandEvent& ev);
 
 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;
 
        boost::shared_ptr<Content> _content;
+
+       wxStaticText* _filters;
+       wxButton* _filters_button;
 };
 
 };
 
index ac744ddc9d540c3018632b57086236178a0ce813..a2aa6f2349fc76b9cb710debd7fe7b189370f778 100644 (file)
@@ -159,10 +159,6 @@ VideoPanel::VideoPanel (ContentPanel* p)
        _scale_custom = new wxRadioButton (this, wxID_ANY, _("custom"));
        _scale_custom_edit = new Button (this, _("Edit..."));
 
        _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"));
        _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));
        _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));
        _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);
        _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);
        _colour_conversion_label->Show (full);
        _colour_conversion->Show (full);
        _edit_colour_conversion_button->Show (full);
@@ -301,15 +293,6 @@ VideoPanel::add_to_grid ()
                }
                ++r;
 
                }
                ++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);
                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 ();
 
 
                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) {
        } 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 ()
 
 void
 VideoPanel::setup_description ()
@@ -650,8 +607,6 @@ VideoPanel::setup_sensitivity ()
                _scale_custom->Enable (false);
                _scale_custom_edit->Enable (false);
                _description->Enable (false);
                _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 {
                _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);
                _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());
        }
                _colour_conversion->Enable (!video_sel.empty());
                _range->Enable (single && !video_sel.empty());
        }
index b74318f2f6cc8514af42cb600cfb782ce8ae879a..2304e5e0b7f3bb3041b22b03757283613a36317b 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 private:
        void reference_clicked ();
 
 private:
        void reference_clicked ();
-       void edit_filters_clicked ();
        void colour_conversion_changed ();
        void edit_colour_conversion_clicked ();
        void range_changed ();
        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;
        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;
        wxStaticText* _colour_conversion_label;
        wxChoice* _colour_conversion;
        wxButton* _edit_colour_conversion_button;