From acee88762b4588c746f93dec3f210283589bb2fc Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 4 Sep 2020 17:24:12 +0200 Subject: Support CPL metadata. --- src/wx/interop_metadata_dialog.cc | 123 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/wx/interop_metadata_dialog.cc (limited to 'src/wx/interop_metadata_dialog.cc') diff --git a/src/wx/interop_metadata_dialog.cc b/src/wx/interop_metadata_dialog.cc new file mode 100644 index 000000000..f91bdcf7f --- /dev/null +++ b/src/wx/interop_metadata_dialog.cc @@ -0,0 +1,123 @@ +/* + Copyright (C) 2019 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "interop_metadata_dialog.h" +#include "editable_list.h" +#include "rating_dialog.h" +#include "lib/film.h" +#include +#include + +using std::string; +using std::vector; +using boost::weak_ptr; +using boost::shared_ptr; + +static string +column (dcp::Rating r, int c) +{ + if (c == 0) { + return r.agency; + } + + return r.label; +} + +InteropMetadataDialog::InteropMetadataDialog (wxWindow* parent, weak_ptr film) + : wxDialog (parent, wxID_ANY, _("Metadata")) + , _film (film) +{ + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + SetSizer (overall_sizer); + + wxFlexGridSizer* sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + sizer->AddGrowableCol (1, 1); + + { + int flags = wxALIGN_TOP | wxLEFT | wxRIGHT | wxTOP; +#ifdef __WXOSX__ + flags |= wxALIGN_RIGHT; +#endif + wxStaticText* m = create_label (this, _("Ratings"), true); + sizer->Add (m, 0, flags, DCPOMATIC_SIZER_GAP); + } + + vector columns; + columns.push_back (EditableListColumn(_("Agency"), 200, true)); + columns.push_back (EditableListColumn(_("Label"), 50, true)); + _ratings = new EditableList ( + this, + columns, + boost::bind(&InteropMetadataDialog::ratings, this), + boost::bind(&InteropMetadataDialog::set_ratings, this, _1), + boost::bind(&column, _1, _2), + true, + false + ); + sizer->Add (_ratings, 1, wxEXPAND); + + add_label_to_sizer (sizer, this, _("Content version"), true); + _content_version = new wxTextCtrl (this, wxID_ANY); + sizer->Add (_content_version, 1, wxEXPAND); + + shared_ptr f = _film.lock(); + DCPOMATIC_ASSERT (f); + vector cv = f->content_versions(); + _content_version->SetValue (std_to_wx(cv.empty() ? "" : cv[0])); + + overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); + + wxSizer* 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 +InteropMetadataDialog::ratings () const +{ + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + return film->ratings (); +} + +void +InteropMetadataDialog::set_ratings (vector r) +{ + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + film->set_ratings (r); +} + +void +InteropMetadataDialog::content_version_changed () +{ + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + vector cv; + cv.push_back (wx_to_std(_content_version->GetValue())); + film->set_content_versions (cv); +} -- cgit v1.2.3