#include "lib/film.h"
#include <dcp/types.h>
#include <wx/gbsizer.h>
+#include <wx/notebook.h>
#include <wx/spinctrl.h>
}
-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),
);
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),
);
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);
_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));