d += "-XX";
}
- if (!dm.territory.empty ()) {
- d += "_" + dm.territory;
+ if (_release_territory) {
+ auto territory = _release_territory->subtag();
+ transform (territory.begin(), territory.end(), territory.begin(), ::toupper);
+ d += "_" + territory;
if (dm.rating.empty ()) {
d += "-NR";
} else {
using dcp::raw_convert;
ISDCFMetadata::ISDCFMetadata (cxml::ConstNodePtr node)
- : territory (node->string_child ("Territory"))
- , rating (node->string_child ("Rating"))
+ : rating (node->string_child ("Rating"))
, studio (node->string_child ("Studio"))
, facility (node->string_child ("Facility"))
/* This stuff was added later */
void
ISDCFMetadata::as_xml (xmlpp::Node* root) const
{
- root->add_child("Territory")->add_child_text (territory);
root->add_child("Rating")->add_child_text (rating);
root->add_child("Studio")->add_child_text (studio);
root->add_child("Facility")->add_child_text (facility);
bool
operator== (ISDCFMetadata const & a, ISDCFMetadata const & b)
{
- return a.territory == b.territory &&
- a.rating == b.rating &&
+ return a.rating == b.rating &&
a.studio == b.studio &&
a.facility == b.facility &&
a.temp_version == b.temp_version &&
void as_xml (xmlpp::Node *) const;
void read_old_metadata (std::string, std::string);
- std::string territory;
std::string rating;
std::string studio;
std::string facility;
}
_interop_metadata_dialog = new InteropMetadataDialog (_panel, _film);
+ _interop_metadata_dialog->setup ();
_interop_metadata_dialog->Show ();
} else {
if (_smpte_metadata_dialog) {
break;
case Film::Property::CONTENT_VERSIONS:
case Film::Property::VERSION_NUMBER:
+ case Film::Property::RELEASE_TERRITORY:
setup_dcp_name ();
break;
default:
InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr<Film> film)
- : wxDialog (parent, wxID_ANY, _("Metadata"))
- , _film (film)
+ : MetadataDialog (parent, film)
{
- auto overall_sizer = new wxBoxSizer (wxVERTICAL);
- SetSizer (overall_sizer);
- auto sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
- sizer->AddGrowableCol (1, 1);
+}
- auto f = _film.lock();
- DCPOMATIC_ASSERT (f);
+void
+InteropMetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer)
+{
+ MetadataDialog::setup_standard (panel, sizer);
{
int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP;
#ifdef __WXOSX__
flags |= wxALIGN_RIGHT;
#endif
- auto m = create_label (this, _("Ratings"), true);
+ auto m = create_label (panel, _("Ratings"), true);
sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP);
}
columns.push_back (EditableListColumn(_("Agency"), 200, true));
columns.push_back (EditableListColumn(_("Label"), 50, true));
_ratings = new EditableList<dcp::Rating, RatingDialog> (
- this,
+ panel,
columns,
boost::bind(&InteropMetadataDialog::ratings, this),
boost::bind(&InteropMetadataDialog::set_ratings, this, _1),
);
sizer->Add (_ratings, 1, wxEXPAND);
- add_label_to_sizer (sizer, this, _("Content version"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
- _content_version = new wxTextCtrl (this, wxID_ANY);
+ add_label_to_sizer (sizer, panel, _("Content version"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ _content_version = new wxTextCtrl (panel, wxID_ANY);
sizer->Add (_content_version, 1, wxEXPAND);
- auto cv = f->content_versions();
+ auto cv = film()->content_versions();
_content_version->SetValue (std_to_wx(cv.empty() ? "" : cv[0]));
- overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
-
- auto buttons = CreateSeparatedButtonSizer (wxCLOSE);
- if (buttons) {
- overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
- }
-
- overall_sizer->Layout ();
- overall_sizer->SetSizeHints (this);
-
_content_version->Bind (wxEVT_TEXT, boost::bind(&InteropMetadataDialog::content_version_changed, this));
_content_version->SetFocus ();
}
vector<dcp::Rating>
InteropMetadataDialog::ratings () const
{
- auto film = _film.lock ();
- DCPOMATIC_ASSERT (film);
- return film->ratings ();
+ return film()->ratings ();
}
+
void
InteropMetadataDialog::set_ratings (vector<dcp::Rating> r)
{
- auto film = _film.lock ();
- DCPOMATIC_ASSERT (film);
- film->set_ratings (r);
+ film()->set_ratings (r);
}
+
void
InteropMetadataDialog::content_version_changed ()
{
- auto film = _film.lock ();
- DCPOMATIC_ASSERT (film);
- vector<string> cv;
- cv.push_back (wx_to_std(_content_version->GetValue()));
- film->set_content_versions (cv);
+ film()->set_content_versions ({ wx_to_std(_content_version->GetValue()) });
}
#include "editable_list.h"
+#include "metadata_dialog.h"
#include <dcp/language_tag.h>
#include <dcp/types.h>
#include <wx/wx.h>
class RatingDialog;
-class InteropMetadataDialog : public wxDialog
+class InteropMetadataDialog : public MetadataDialog
{
public:
InteropMetadataDialog (wxWindow* parent, std::weak_ptr<Film> film);
private:
- std::vector<dcp::Rating> ratings () const;
+ void setup_standard (wxPanel* panel, wxSizer* sizer) override;
+
void set_ratings (std::vector<dcp::Rating> r);
void content_version_changed ();
- std::weak_ptr<Film> _film;
+ std::vector<dcp::Rating> ratings () const;
+
EditableList<dcp::Rating, RatingDialog>* _ratings;
wxTextCtrl* _content_version;
};
ISDCFMetadataDialog::ISDCFMetadataDialog (wxWindow* parent, ISDCFMetadata dm, bool threed)
: TableDialog (parent, _("ISDCF name"), 2, 1, true)
{
- add (_("Territory (e.g. UK)"), true);
- _territory = add (new wxTextCtrl (this, wxID_ANY));
-
add (_("Rating (e.g. 15)"), true);
_rating = add (new wxTextCtrl (this, wxID_ANY));
add (_("Mastered luminance (e.g. 14fl)"), true);
_mastered_luminance = add (new wxTextCtrl (this, wxID_ANY));
- _territory->SetValue (std_to_wx (dm.territory));
_rating->SetValue (std_to_wx (dm.rating));
_studio->SetValue (std_to_wx (dm.studio));
_facility->SetValue (std_to_wx (dm.facility));
{
ISDCFMetadata dm;
- dm.territory = wx_to_std (_territory->GetValue ());
dm.rating = wx_to_std (_rating->GetValue ());
dm.studio = wx_to_std (_studio->GetValue ());
dm.facility = wx_to_std (_facility->GetValue ());
ISDCFMetadata isdcf_metadata () const;
private:
- wxTextCtrl* _territory;
wxTextCtrl* _rating;
wxTextCtrl* _studio;
wxTextCtrl* _facility;
*/
+#include "dcpomatic_button.h"
+#include "full_language_tag_dialog.h"
#include "metadata_dialog.h"
#include "wx_util.h"
#include "lib/film.h"
SetSizer (overall_sizer);
overall_sizer->Layout ();
overall_sizer->SetSizeHints (this);
+
+ _film_changed_connection = film()->Change.connect(boost::bind(&MetadataDialog::film_changed, this, _1, _2));
+
+ film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY);
+}
+
+
+void
+MetadataDialog::film_changed (ChangeType type, Film::Property property)
+{
+ if (type != ChangeType::DONE) {
+ return;
+ }
+
+ if (property == Film::Property::RELEASE_TERRITORY) {
+ auto rt = film()->release_territory();
+ checked_set (_enable_release_territory, static_cast<bool>(rt));
+ if (rt) {
+ _release_territory = *rt;
+ checked_set (_release_territory_text, std_to_wx(*dcp::LanguageTag::get_subtag_description(*_release_territory)));
+ }
+ }
+}
+
+
+void
+MetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer)
+{
+ _enable_release_territory = new wxCheckBox (panel, wxID_ANY, _("Release territory"));
+ sizer->Add (_enable_release_territory, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP);
+ {
+ auto s = new wxBoxSizer (wxHORIZONTAL);
+ _release_territory_text = new wxStaticText (panel, wxID_ANY, wxT(""));
+ s->Add (_release_territory_text, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
+ _edit_release_territory = new Button (panel, _("Edit..."));
+ s->Add (_edit_release_territory, 0, wxLEFT, DCPOMATIC_SIZER_GAP);
+ sizer->Add (s, 0, wxEXPAND);
+ }
+
+ _edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&MetadataDialog::edit_release_territory, this));
+ _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_release_territory_changed, this));
+}
+
+
+void
+MetadataDialog::edit_release_territory ()
+{
+ DCPOMATIC_ASSERT (film()->release_territory());
+ auto d = new RegionSubtagDialog(this, *film()->release_territory());
+ d->ShowModal ();
+ auto tag = d->get();
+ if (tag) {
+ _release_territory = *tag;
+ film()->set_release_territory(*tag);
+ }
+ d->Destroy ();
+}
+
+
+void
+MetadataDialog::setup_sensitivity ()
+{
+ auto const enabled = _enable_release_territory->GetValue();
+ _release_territory_text->Enable (enabled);
+ _edit_release_territory->Enable (enabled);
+}
+
+
+void
+MetadataDialog::enable_release_territory_changed ()
+{
+ setup_sensitivity ();
+ if (_enable_release_territory->GetValue()) {
+ film()->set_release_territory (_release_territory.get_value_or(dcp::LanguageTag::RegionSubtag("US")));
+ } else {
+ film()->set_release_territory ();
+ }
}
*/
+#ifndef DCPOMATIC_METADATA_DIALOG_H
+#define DCPOMATIC_METADATA_DIALOG_H
+
+
+#include "lib/change_signaller.h"
+#include "lib/film.h"
#include "lib/warnings.h"
#include "lib/weak_film.h"
DCPOMATIC_DISABLE_WARNINGS
DCPOMATIC_ENABLE_WARNINGS
+class Button;
+
+
class MetadataDialog : public wxDialog, public WeakFilm
{
public:
virtual void setup ();
protected:
- virtual void setup_standard (wxPanel*, wxSizer*) {}
+ virtual void setup_standard (wxPanel*, wxSizer*);
virtual void setup_advanced (wxPanel*, wxSizer*) {}
+ virtual void film_changed (ChangeType type, Film::Property property);
+ virtual void setup_sensitivity ();
+
+private:
+ void edit_release_territory ();
+ void enable_release_territory_changed ();
+
+ wxCheckBox* _enable_release_territory;
+ /** The current release territory displayed in the UI; since we can't easily convert
+ * the string in _release_territory_text to a RegionSubtag we just store the RegionSubtag
+ * alongside.
+ */
+ boost::optional<dcp::LanguageTag::RegionSubtag> _release_territory;
+ wxStaticText* _release_territory_text;
+ Button* _edit_release_territory;
+
+ boost::signals2::scoped_connection _film_changed_connection;
};
+
+
+#endif
+
{
MetadataDialog::setup_advanced (panel, sizer);
- _enable_release_territory = new wxCheckBox (panel, wxID_ANY, _("Release territory"));
- sizer->Add (_enable_release_territory, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP);
- {
- auto s = new wxBoxSizer (wxHORIZONTAL);
- _release_territory_text = new wxStaticText (panel, wxID_ANY, wxT(""));
- s->Add (_release_territory_text, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
- _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, 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);
_luminance_unit->Append (_("foot lambert"));
_name_language->Changed.connect (boost::bind(&SMPTEMetadataDialog::name_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));
_enable_chain->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_chain_changed, this));
_facility->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::facility_changed, this));
_luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
_luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
- _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_release_territory_changed, this));
-
- _film_changed_connection = film()->Change.connect(boost::bind(&SMPTEMetadataDialog::film_changed, this, _1, _2));
film_changed (ChangeType::DONE, Film::Property::NAME_LANGUAGE);
- film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY);
film_changed (ChangeType::DONE, Film::Property::VERSION_NUMBER);
film_changed (ChangeType::DONE, Film::Property::STATUS);
film_changed (ChangeType::DONE, Film::Property::CHAIN);
void
SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property)
{
+ MetadataDialog::film_changed (type, property);
+
if (type != ChangeType::DONE || film()->interop()) {
return;
}
if (property == Film::Property::NAME_LANGUAGE) {
_name_language->set (film()->name_language());
- } else if (property == Film::Property::RELEASE_TERRITORY) {
- auto rt = film()->release_territory();
- checked_set (_enable_release_territory, static_cast<bool>(rt));
- if (rt) {
- _release_territory = *rt;
- checked_set (_release_territory_text, std_to_wx(*dcp::LanguageTag::get_subtag_description(*_release_territory)));
- }
} else if (property == Film::Property::VERSION_NUMBER) {
checked_set (_version_number, film()->version_number());
} else if (property == Film::Property::STATUS) {
}
-void
-SMPTEMetadataDialog::edit_release_territory ()
-{
- DCPOMATIC_ASSERT (film()->release_territory());
- auto d = new RegionSubtagDialog(this, *film()->release_territory());
- d->ShowModal ();
- auto tag = d->get();
- if (tag) {
- _release_territory = *tag;
- film()->set_release_territory(*tag);
- }
- d->Destroy ();
-}
-
-
void
SMPTEMetadataDialog::version_number_changed ()
{
void
SMPTEMetadataDialog::setup_sensitivity ()
{
- {
- auto const enabled = _enable_release_territory->GetValue();
- _release_territory_text->Enable (enabled);
- _edit_release_territory->Enable (enabled);
- }
+ MetadataDialog::setup_sensitivity ();
_chain->Enable (_enable_chain->GetValue());
_distributor->Enable (_enable_distributor->GetValue());
}
-void
-SMPTEMetadataDialog::enable_release_territory_changed ()
-{
- setup_sensitivity ();
- if (_enable_release_territory->GetValue()) {
- film()->set_release_territory (_release_territory.get_value_or(dcp::LanguageTag::RegionSubtag("US")));
- } else {
- film()->set_release_territory ();
- }
-}
-
-
void
SMPTEMetadataDialog::enable_chain_changed ()
{
private:
void setup_standard (wxPanel* parent, wxSizer* sizer) override;
void setup_advanced (wxPanel* parent, wxSizer* sizer) override;
+ void film_changed (ChangeType type, Film::Property property) override;
+ void setup_sensitivity () override;
std::vector<dcp::Rating> ratings () const;
void set_ratings (std::vector<dcp::Rating> r);
std::vector<std::string> content_versions () const;
void set_content_versions (std::vector<std::string> v);
void name_language_changed (dcp::LanguageTag tag);
- void edit_release_territory ();
void version_number_changed ();
void status_changed ();
void chain_changed ();
void distributor_changed ();
void facility_changed ();
void luminance_changed ();
- void film_changed (ChangeType type, Film::Property property);
- void setup_sensitivity ();
- void enable_release_territory_changed ();
void enable_chain_changed ();
void enable_distributor_changed ();
void enable_facility_changed ();
LanguageTagWidget* _name_language;
- wxCheckBox* _enable_release_territory;
- /** The current release territory displayed in the UI; since we can't easily convert
- * the string in _release_territory_text to a RegionSubtag we just store the RegionSubtag
- * alongside.
- */
- boost::optional<dcp::LanguageTag::RegionSubtag> _release_territory;
- wxStaticText* _release_territory_text;
- Button* _edit_release_territory;
wxSpinCtrl* _version_number;
wxChoice* _status;
wxCheckBox* _enable_chain;
wxChoice* _luminance_unit;
EditableList<dcp::Rating, RatingDialog>* _ratings;
EditableList<std::string, ContentVersionDialog>* _content_versions;
-
- boost::signals2::scoped_connection _film_changed_connection;
};
BOOST_REQUIRE (audio->audio);
audio->audio->set_language(dcp::LanguageTag("en-US"));
film->set_content_versions({"1"});
+ film->set_release_territory(dcp::LanguageTag::RegionSubtag("GB"));
ISDCFMetadata m;
- m.territory = "UK";
m.rating = "PG";
m.studio = "ST";
m.facility = "FA";
film->set_isdcf_metadata (m);
film->set_interop (true);
- BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_UK-PG_10_2K_ST_20140704_FA_IOP_OV");
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_GB-PG_10_2K_ST_20140704_FA_IOP_OV");
/* Check that specifying no audio language writes XX */
audio->audio->set_language (boost::none);
film->set_isdcf_metadata (m);
- BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_UK-PG_10_2K_ST_20140704_FA_IOP_OV");
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_GB-PG_10_2K_ST_20140704_FA_IOP_OV");
/* Test a long name and some different data */
text->text.front()->set_language (dcp::LanguageTag("fr-FR"));
film->examine_and_add_content (text);
film->set_version_number(2);
+ film->set_release_territory(dcp::LanguageTag::RegionSubtag("US"));
BOOST_REQUIRE (!wait_for_jobs());
audio = content_factory("test/data/sine_440.wav").front();
film->examine_and_add_content (audio);
BOOST_REQUIRE (!wait_for_jobs());
BOOST_REQUIRE (audio->audio);
audio->audio->set_language (dcp::LanguageTag("de-DE"));
- m.territory = "US";
m.rating = "R";
m.studio = "DI";
m.facility = "PP";