diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-03-21 22:07:40 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-03-22 10:29:00 +0100 |
| commit | 2bb0b230a557c18febab8f88043f197868d986db (patch) | |
| tree | 22fad733a9bf096157c4b6ee25802e072a624359 | |
| parent | 6d53c07bb08e4437eaeec30e0469ad992b3d5372 (diff) | |
Split SMPTE metadata dialogue into two tabs (#1933).
| -rw-r--r-- | src/wx/smpte_metadata_dialog.cc | 152 | ||||
| -rw-r--r-- | 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 <dcp/types.h> #include <wx/gbsizer.h> +#include <wx/notebook.h> #include <wx/spinctrl.h> @@ -66,55 +67,53 @@ content_versions_column (string v, int) } -SMPTEMetadataDialog::SMPTEMetadataDialog (wxWindow* parent, weak_ptr<Film> 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<dcp::LanguageTag> 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<EditableListColumn> columns; columns.push_back (EditableListColumn("Language", 250, true)); _additional_subtitle_languages = new EditableList<dcp::LanguageTag, LanguageTagDialog> ( - 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<Film> 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<dcp::Rating, RatingDialog> ( + 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<dcp::Rating, RatingDialog> ( - 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<EditableListColumn> columns; columns.push_back (EditableListColumn("Version", 350, true)); _content_versions = new EditableList<string, ContentVersionDialog> ( - 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<Film> 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<Film> 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<Film> 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> film); private: + wxPanel* main_panel (wxWindow* parent); + wxPanel* advanced_panel (wxWindow* parent); std::vector<dcp::Rating> ratings () const; void set_ratings (std::vector<dcp::Rating> r); std::vector<std::string> content_versions () const; |
