X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fmarkers_dialog.cc;h=ed0b68c8fdae4ce288d935d22e6092537d824939;hb=3c29aa6531a4046a8db72dcac81189eb8893233c;hp=31789af2cca675bf190f746cce83afe7f33dba33;hpb=dd9be86db6cde0afa5da0d1d1ac43b42e05dca26;p=dcpomatic.git diff --git a/src/wx/markers_dialog.cc b/src/wx/markers_dialog.cc index 31789af2c..ed0b68c8f 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,26 +18,31 @@ */ -#include "markers_dialog.h" -#include "wx_util.h" -#include "timecode.h" -#include "static_text.h" -#include "dcpomatic_button.h" + #include "check_box.h" +#include "dcpomatic_button.h" #include "film_viewer.h" +#include "markers_dialog.h" +#include "static_text.h" +#include "timecode.h" +#include "wx_util.h" #include "lib/film.h" #include +#include +LIBDCP_DISABLE_WARNINGS #include +LIBDCP_ENABLE_WARNINGS #include -#include -using std::cout; -using boost::bind; + +using std::make_shared; using std::shared_ptr; using std::weak_ptr; +using boost::bind; using boost::optional; using dcpomatic::DCPTime; + class Marker { public: @@ -53,10 +58,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 +70,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 +89,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 +99,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 +122,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); }