X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fdcp_content_type.cc;h=613ed15a5b002622017dc0b13151ed972a92b1bf;hp=aae80530831228d7440e6b2f06dade0af5a81033;hb=HEAD;hpb=13511ed2fcc23f4d5f9c507c775c3c5cfd82d155 diff --git a/src/lib/dcp_content_type.cc b/src/lib/dcp_content_type.cc index aae805308..bc9bf0d67 100644 --- a/src/lib/dcp_content_type.cc +++ b/src/lib/dcp_content_type.cc @@ -1,19 +1,20 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + 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. - This program is distributed in the hope that it will be useful, + 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ @@ -21,72 +22,111 @@ * @brief A description of the type of content for a DCP (e.g. feature, trailer etc.) */ -#include #include "dcp_content_type.h" +#include "dcpomatic_assert.h" + +#include "i18n.h" + +using boost::optional; using namespace std; -vector DCPContentType::_dcp_content_types; -DCPContentType::DCPContentType (string p, libdcp::ContentKind k, string d) +vector DCPContentType::_dcp_content_types; + + +DCPContentType::DCPContentType (string p, dcp::ContentKind k, string d) : _pretty_name (p) , _libdcp_kind (k) - , _dci_name (d) + , _isdcf_name (d) { } + void DCPContentType::setup_dcp_content_types () { - _dcp_content_types.push_back (new DCPContentType ("Feature", libdcp::FEATURE, "FTR")); - _dcp_content_types.push_back (new DCPContentType ("Short", libdcp::SHORT, "SHR")); - _dcp_content_types.push_back (new DCPContentType ("Trailer", libdcp::TRAILER, "TLR")); - _dcp_content_types.push_back (new DCPContentType ("Test", libdcp::TEST, "TST")); - _dcp_content_types.push_back (new DCPContentType ("Transitional", libdcp::TRANSITIONAL, "XSN")); - _dcp_content_types.push_back (new DCPContentType ("Rating", libdcp::RATING, "RTG")); - _dcp_content_types.push_back (new DCPContentType ("Teaser", libdcp::TEASER, "TSR")); - _dcp_content_types.push_back (new DCPContentType ("Policy", libdcp::POLICY, "POL")); - _dcp_content_types.push_back (new DCPContentType ("Public Service Announcement", libdcp::PUBLIC_SERVICE_ANNOUNCEMENT, "PSA")); - _dcp_content_types.push_back (new DCPContentType ("Advertisement", libdcp::ADVERTISEMENT, "ADV")); + /// TRANSLATORS: these are the types that a DCP can have, explained in some + /// more detail here: https://registry-page.isdcf.com/contenttypes/ + _dcp_content_types = { + DCPContentType(_("Feature"), dcp::ContentKind::FEATURE, N_("FTR")), + DCPContentType(_("Short"), dcp::ContentKind::SHORT, N_("SHR")), + DCPContentType(_("Trailer"), dcp::ContentKind::TRAILER, N_("TLR")), + DCPContentType(_("Test"), dcp::ContentKind::TEST, N_("TST")), + DCPContentType(_("Transitional"), dcp::ContentKind::TRANSITIONAL, N_("XSN")), + DCPContentType(_("Rating"), dcp::ContentKind::RATING, N_("RTG")), + DCPContentType(_("Teaser"), dcp::ContentKind::TEASER, N_("TSR")), + DCPContentType(_("Policy"), dcp::ContentKind::POLICY, N_("POL")), + DCPContentType(_("Public Service Announcement"), dcp::ContentKind::PUBLIC_SERVICE_ANNOUNCEMENT, N_("PSA")), + DCPContentType(_("Advertisement"), dcp::ContentKind::ADVERTISEMENT, N_("ADV")), + DCPContentType(_("Clip"), dcp::ContentKind::CLIP, N_("CLP")), + DCPContentType(_("Promo"), dcp::ContentKind::PROMO, N_("PRO")), + DCPContentType(_("Stereo card"), dcp::ContentKind::STEREOCARD, N_("STR")), + DCPContentType(_("Episode"), dcp::ContentKind::EPISODE, N_("EPS")), + DCPContentType(_("Highlights"), dcp::ContentKind::HIGHLIGHTS, N_("HLT")), + DCPContentType(_("Event"), dcp::ContentKind::EVENT, N_("EVT")), + }; } + DCPContentType const * -DCPContentType::from_pretty_name (string n) +DCPContentType::from_isdcf_name (string n) { - for (vector::const_iterator i = _dcp_content_types.begin(); i != _dcp_content_types.end(); ++i) { - if ((*i)->pretty_name() == n) { - return *i; + for (auto& i: _dcp_content_types) { + if (i.isdcf_name() == n) { + return &i; } } - return 0; + return nullptr; } + +DCPContentType const * +DCPContentType::from_libdcp_kind (dcp::ContentKind kind) +{ + for (auto& i: _dcp_content_types) { + if (i.libdcp_kind() == kind) { + return &i; + } + } + + DCPOMATIC_ASSERT (false); + return nullptr; +} + + DCPContentType const * DCPContentType::from_index (int n) { - assert (n >= 0 && n < int (_dcp_content_types.size ())); - return _dcp_content_types[n]; + DCPOMATIC_ASSERT (n >= 0 && n < int(_dcp_content_types.size())); + return &_dcp_content_types[n]; } -int + +optional DCPContentType::as_index (DCPContentType const * c) { - vector::size_type i = 0; - while (i < _dcp_content_types.size() && _dcp_content_types[i] != c) { + vector::size_type i = 0; + while (i < _dcp_content_types.size() && &_dcp_content_types[i] != c) { ++i; } - if (i == _dcp_content_types.size ()) { - return -1; + if (i == _dcp_content_types.size()) { + return {}; } return i; } + vector DCPContentType::all () { - return _dcp_content_types; + vector raw; + for (auto& type: _dcp_content_types) { + raw.push_back (&type); + } + return raw; }