From 2bb0b230a557c18febab8f88043f197868d986db Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 21 Mar 2021 22:07:40 +0100 Subject: [PATCH] Split SMPTE metadata dialogue into two tabs (#1933). --- src/wx/smpte_metadata_dialog.cc | 152 +++++++++++++++++++------------- src/wx/smpte_metadata_dialog.h | 2 + 2 files changed, 95 insertions(+), 59 deletions(-) diff --git a/src/wx/smpte_metadata_dialog.cc b/src/wx/smpte_metadata_dialog.cc index 27ab94502..61bccbee5 100644 --- a/src/wx/smpte_metadata_dialog.cc +++ b/src/wx/smpte_metadata_dialog.cc @@ -28,6 +28,7 @@ #include "lib/film.h" #include #include +#include #include @@ -66,55 +67,53 @@ content_versions_column (string v, int) } -SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_film) - : wxDialog (parent, wxID_ANY, _("Metadata")) - , WeakFilm (weak_film) +wxPanel * +SMPTEMetadataDialog::main_panel (wxWindow* parent) { - auto overall_sizer = new wxBoxSizer (wxVERTICAL); - SetSizer (overall_sizer); + auto panel = new wxPanel (parent, wxID_ANY); auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); sizer->AddGrowableCol (1, 1); - add_label_to_sizer (sizer, this, _("Title language"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Title language"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); _name_language = new LanguageTagWidget( - this, + panel, wxString::Format(_("The language that the film's title (\"%s\") is in"), std_to_wx(film()->name())), film()->name_language() ); sizer->Add (_name_language->sizer(), 0, wxEXPAND); - add_label_to_sizer (sizer, this, _("Audio language"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Audio language"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); _audio_language = new LanguageTagWidget( - this, + panel, _("The main language that is spoken in the film's soundtrack"), film()->audio_language() ); sizer->Add (_audio_language->sizer(), 0, wxEXPAND); - _enable_main_subtitle_language = new wxCheckBox (this, wxID_ANY, _("Main subtitle language")); - sizer->Add (_enable_main_subtitle_language, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); + _enable_main_subtitle_language = new wxCheckBox (panel, wxID_ANY, _("Main subtitle language")); + sizer->Add (_enable_main_subtitle_language, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); vector subtitle_languages = film()->subtitle_languages(); _main_subtitle_language = new LanguageTagWidget( - this, + panel, _("The main language that is displayed in the film's subtitles"), subtitle_languages.empty() ? dcp::LanguageTag("en-US") : subtitle_languages.front() ); sizer->Add (_main_subtitle_language->sizer(), 0, wxEXPAND); { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; + int flags = wxALIGN_TOP | wxRIGHT | wxTOP; #ifdef __WXOSX__ flags |= wxALIGN_RIGHT; #endif - wxStaticText* m = create_label (this, _("Additional subtitle languages"), true); + auto m = create_label (panel, _("Additional subtitle languages"), true); sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); } vector columns; columns.push_back (EditableListColumn("Language", 250, true)); _additional_subtitle_languages = new EditableList ( - this, + panel, columns, boost::bind(&SMPTEMetadataDialog::additional_subtitle_languages, this), boost::bind(&SMPTEMetadataDialog::set_additional_subtitle_languages, this, _1), @@ -124,85 +123,101 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ ); sizer->Add (_additional_subtitle_languages, 1, wxEXPAND); + { + int flags = wxALIGN_TOP | wxRIGHT | wxTOP; +#ifdef __WXOSX__ + flags |= wxALIGN_RIGHT; +#endif + auto m = create_label (panel, _("Ratings"), true); + sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); + } + + columns.clear (); + columns.push_back (EditableListColumn("Agency", 200, true)); + columns.push_back (EditableListColumn("Label", 50, true)); + _ratings = new EditableList ( + panel, + columns, + boost::bind(&SMPTEMetadataDialog::ratings, this), + boost::bind(&SMPTEMetadataDialog::set_ratings, this, _1), + boost::bind(&ratings_column, _1, _2), + true, + false + ); + sizer->Add (_ratings, 1, wxEXPAND); + + auto overall_sizer = new wxBoxSizer (wxVERTICAL); + overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); + panel->SetSizer (overall_sizer); + + return panel; +} + + +wxPanel * +SMPTEMetadataDialog::advanced_panel (wxWindow* parent) +{ + auto panel = new wxPanel (parent, wxID_ANY); + + auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + sizer->AddGrowableCol (1, 1); + Button* edit_release_territory = nullptr; - add_label_to_sizer (sizer, this, _("Release territory"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Release territory"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); { wxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _release_territory = new wxStaticText (this, wxID_ANY, wxT("")); + _release_territory = new wxStaticText (panel, wxID_ANY, wxT("")); s->Add (_release_territory, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP); - edit_release_territory = new Button (this, _("Edit...")); + edit_release_territory = new Button (panel, _("Edit...")); s->Add (edit_release_territory, 0, wxLEFT, DCPOMATIC_SIZER_GAP); sizer->Add (s, 0, wxEXPAND); } - add_label_to_sizer (sizer, this, _("Version number"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _version_number = new wxSpinCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 1000); + add_label_to_sizer (sizer, panel, _("Version number"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _version_number = new wxSpinCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 1000); sizer->Add (_version_number, 0); - add_label_to_sizer (sizer, this, _("Status"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _status = new wxChoice (this, wxID_ANY); + add_label_to_sizer (sizer, panel, _("Status"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _status = new wxChoice (panel, wxID_ANY); sizer->Add (_status, 0); - add_label_to_sizer (sizer, this, _("Chain"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _chain = new wxTextCtrl (this, wxID_ANY); + add_label_to_sizer (sizer, panel, _("Chain"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _chain = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_chain, 1, wxEXPAND); - add_label_to_sizer (sizer, this, _("Distributor"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _distributor = new wxTextCtrl (this, wxID_ANY); + add_label_to_sizer (sizer, panel, _("Distributor"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _distributor = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_distributor, 1, wxEXPAND); - add_label_to_sizer (sizer, this, _("Facility"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); - _facility = new wxTextCtrl (this, wxID_ANY); + add_label_to_sizer (sizer, panel, _("Facility"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); + _facility = new wxTextCtrl (panel, wxID_ANY); sizer->Add (_facility, 1, wxEXPAND); - add_label_to_sizer (sizer, this, _("Luminance"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL); + add_label_to_sizer (sizer, panel, _("Luminance"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); { auto s = new wxBoxSizer (wxHORIZONTAL); - _luminance_value = new wxSpinCtrlDouble (this, wxID_ANY); + _luminance_value = new wxSpinCtrlDouble (panel, wxID_ANY); _luminance_value->SetDigits (1); _luminance_value->SetIncrement (0.1); s->Add (_luminance_value, 0); - _luminance_unit = new wxChoice (this, wxID_ANY); + _luminance_unit = new wxChoice (panel, wxID_ANY); s->Add (_luminance_unit, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); sizer->Add (s, 1, wxEXPAND); } { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; + int flags = wxALIGN_TOP | wxRIGHT | wxTOP; #ifdef __WXOSX__ flags |= wxALIGN_RIGHT; #endif - wxStaticText* m = create_label (this, _("Ratings"), true); + auto m = create_label (panel, _("Content versions"), true); sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); } - columns.clear (); - columns.push_back (EditableListColumn("Agency", 200, true)); - columns.push_back (EditableListColumn("Label", 50, true)); - _ratings = new EditableList ( - this, - columns, - boost::bind(&SMPTEMetadataDialog::ratings, this), - boost::bind(&SMPTEMetadataDialog::set_ratings, this, _1), - boost::bind(&ratings_column, _1, _2), - true, - false - ); - sizer->Add (_ratings, 1, wxEXPAND); - - { - int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; -#ifdef __WXOSX__ - flags |= wxALIGN_RIGHT; -#endif - auto m = create_label (this, _("Content versions"), true); - sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); - } - - columns.clear (); + vector columns; columns.push_back (EditableListColumn("Version", 350, true)); _content_versions = new EditableList ( - this, + panel, columns, boost::bind(&SMPTEMetadataDialog::content_versions, this), boost::bind(&SMPTEMetadataDialog::set_content_versions, this, _1), @@ -212,13 +227,33 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ ); sizer->Add (_content_versions, 1, wxEXPAND); + auto overall_sizer = new wxBoxSizer (wxVERTICAL); overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); + panel->SetSizer (overall_sizer); + + edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&SMPTEMetadataDialog::edit_release_territory, this)); + + return panel; +} + + +SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_film) + : wxDialog (parent, wxID_ANY, _("Metadata")) + , WeakFilm (weak_film) +{ + auto notebook = new wxNotebook (this, wxID_ANY); + notebook->AddPage (main_panel(notebook), _("Standard")); + notebook->AddPage (advanced_panel(notebook), _("Advanced")); + + auto overall_sizer = new wxBoxSizer (wxVERTICAL); + overall_sizer->Add (notebook, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); auto buttons = CreateSeparatedButtonSizer (wxCLOSE); if (buttons) { overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } + SetSizer (overall_sizer); overall_sizer->Layout (); overall_sizer->SetSizeHints (this); @@ -233,7 +268,6 @@ SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr weak_ _audio_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::audio_language_changed, this, _1)); _enable_main_subtitle_language->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_main_subtitle_changed, this)); _main_subtitle_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::main_subtitle_language_changed, this, _1)); - edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&SMPTEMetadataDialog::edit_release_territory, this)); _version_number->Bind (wxEVT_SPINCTRL, boost::bind(&SMPTEMetadataDialog::version_number_changed, this)); _status->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::status_changed, this)); _chain->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::chain_changed, this)); diff --git a/src/wx/smpte_metadata_dialog.h b/src/wx/smpte_metadata_dialog.h index 558023b0f..dcca0e420 100644 --- a/src/wx/smpte_metadata_dialog.h +++ b/src/wx/smpte_metadata_dialog.h @@ -41,6 +41,8 @@ public: SMPTEMetadataDialog (wxWindow* parent, std::weak_ptr film); private: + wxPanel* main_panel (wxWindow* parent); + wxPanel* advanced_panel (wxWindow* parent); std::vector ratings () const; void set_ratings (std::vector r); std::vector content_versions () const; -- 2.30.2