X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fmarkers_dialog.cc;h=04a3b878c265de72880dc94dec1a1c3b71039ee3;hb=63474f980b36b0b845f86b048965314a571a419e;hp=724cb7d9efa51508b2244c743d57746987aa7d30;hpb=8c365af343a15bee11af53fc6bc16487b83260d1;p=dcpomatic.git diff --git a/src/wx/markers_dialog.cc b/src/wx/markers_dialog.cc index 724cb7d9e..04a3b878c 100644 --- a/src/wx/markers_dialog.cc +++ b/src/wx/markers_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2019 Carl Hetherington + Copyright (C) 2019-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ + #include "markers_dialog.h" #include "wx_util.h" #include "timecode.h" @@ -28,14 +29,18 @@ #include "lib/film.h" #include #include -#include +#include #include + using std::cout; -using boost::bind; -using boost::shared_ptr; -using boost::weak_ptr; +using std::shared_ptr; +using std::weak_ptr; +using std::make_shared; using boost::optional; +using boost::bind; +using dcpomatic::DCPTime; + class Marker { @@ -52,10 +57,10 @@ public: set_button = new Button (parent, _("Set from current position")); grid->Add (set_button, wxGBPosition(row, 2)); - shared_ptr f = film.lock (); + auto f = film.lock (); DCPOMATIC_ASSERT (f); - optional t = f->marker (type); + auto t = f->marker (type); checkbox->SetValue (static_cast(t)); if (t) { timecode->set (*t, f->video_frame_rate()); @@ -77,19 +82,26 @@ private: void set () { - shared_ptr f = film.lock (); + auto f = film.lock (); DCPOMATIC_ASSERT (f); - shared_ptr v = viewer.lock (); + auto v = viewer.lock (); DCPOMATIC_ASSERT (v); timecode->set (v->position(), f->video_frame_rate()); + changed (); } void changed () { - shared_ptr f = film.lock (); + auto f = film.lock (); DCPOMATIC_ASSERT (f); + auto vfr = f->video_frame_rate(); + auto tc = timecode->get(vfr); + if (tc >= f->length()) { + tc = f->length() - DCPTime::from_frames(1, vfr); + timecode->set (tc, vfr); + } if (checkbox->GetValue()) { - f->set_marker (type, timecode->get(f->video_frame_rate())); + f->set_marker (type, tc); } else { f->unset_marker (type); } @@ -99,29 +111,36 @@ private: weak_ptr viewer; dcp::Marker type; CheckBox* checkbox; - Timecode* timecode; + Timecode* timecode; Button* set_button; }; + MarkersDialog::MarkersDialog (wxWindow* parent, weak_ptr film, weak_ptr viewer) : wxDialog (parent, wxID_ANY, _("Markers")) , _film (film) { - wxSizer* sizer = new wxBoxSizer (wxVERTICAL); - wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + auto sizer = new wxBoxSizer (wxVERTICAL); + auto grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); int r = 0; - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("First frame of composition"), dcp::FFOC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("Last frame of composition"), dcp::LFOC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("First frame of title credits"), dcp::FFTC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("Last frame of title credits"), dcp::LFTC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("First frame of intermission"), dcp::FFOI))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("Last frame of intermission"), dcp::LFOI))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("First frame of end credits"), dcp::FFEC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("Last frame of end credits"), dcp::LFEC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("First frame of moving credits"), dcp::FFMC))); - _markers.push_back (shared_ptr(new Marker(this, grid, r++, film, viewer, _("Last frame of moving credits"), dcp::LFMC))); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("First frame of composition"), dcp::Marker::FFOC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("Last frame of composition"), dcp::Marker::LFOC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("First frame of title credits"), dcp::Marker::FFTC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("Last frame of title credits"), dcp::Marker::LFTC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("First frame of intermission"), dcp::Marker::FFOI)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("Last frame of intermission"), dcp::Marker::LFOI)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("First frame of end credits"), dcp::Marker::FFEC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("Last frame of end credits"), dcp::Marker::LFEC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("First frame of moving credits"), dcp::Marker::FFMC)); + _markers.push_back (make_shared(this, grid, r++, film, viewer, _("Last frame of moving credits"), dcp::Marker::LFMC)); sizer->Add (grid, 0, wxALL, 8); + + auto buttons = CreateSeparatedButtonSizer (wxCLOSE); + if (buttons) { + sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } + SetSizerAndFit (sizer); }