X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Fmarkers_dialog.cc;h=205d44195e20a9c2aeb548c4e422ff264149ebe9;hp=c8529f108f64bc00b8d65c17a6a1e4a046332301;hb=e72a69ac2ebf24df05ba4b6de65bfa338a58b0ec;hpb=bd7f4bbde17d2087ba4c4bddf6439b3df869b1db diff --git a/src/wx/markers_dialog.cc b/src/wx/markers_dialog.cc index c8529f108..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" @@ -31,13 +32,16 @@ #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 { public: @@ -53,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()); @@ -65,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()); @@ -78,9 +88,9 @@ 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 (); @@ -88,10 +98,16 @@ private: 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); } @@ -105,25 +121,32 @@ private: 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); }