X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fmarkers_dialog.cc;h=205d44195e20a9c2aeb548c4e422ff264149ebe9;hb=1ab712c195a59efc0961bb740b1fc47d80a023c0;hp=724cb7d9efa51508b2244c743d57746987aa7d30;hpb=8c365af343a15bee11af53fc6bc16487b83260d1;p=dcpomatic.git diff --git a/src/wx/markers_dialog.cc b/src/wx/markers_dialog.cc index 724cb7d9e..205d44195 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()); @@ -64,11 +69,17 @@ public: set_sensitivity (); set_button->Bind (wxEVT_BUTTON, bind(&Marker::set, this)); - checkbox->Bind (wxEVT_CHECKBOX, bind(&Marker::set_sensitivity, this)); + checkbox->Bind (wxEVT_CHECKBOX, bind(&Marker::checkbox_clicked, this)); timecode->Changed.connect (bind(&Marker::changed, this)); } private: + void checkbox_clicked () + { + set_sensitivity (); + changed (); + } + void set_sensitivity () { timecode->Enable (checkbox->GetValue()); @@ -77,19 +88,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 +117,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); }