diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-04-29 22:03:37 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-04-29 22:14:25 +0200 |
| commit | 48c75fff036cb6960fc4c86317231914588a668d (patch) | |
| tree | 8c28c39d1a985cb27aa3c2a80a2a0b394013c83b /src | |
| parent | fc18b92ca1cc8d7ec975fddc507fb97aacc6d17f (diff) | |
Add hinting to the seek dialogue; may be a nice fix for #1736.
Diffstat (limited to 'src')
| -rw-r--r-- | src/wx/controls.cc | 2 | ||||
| -rw-r--r-- | src/wx/playhead_to_timecode_dialog.cc | 5 | ||||
| -rw-r--r-- | src/wx/playhead_to_timecode_dialog.h | 4 | ||||
| -rw-r--r-- | src/wx/timecode.h | 32 |
4 files changed, 34 insertions, 9 deletions
diff --git a/src/wx/controls.cc b/src/wx/controls.cc index ec6d4ff4c..022ebfe29 100644 --- a/src/wx/controls.cc +++ b/src/wx/controls.cc @@ -345,7 +345,7 @@ Controls::setup_sensitivity () void Controls::timecode_clicked () { - PlayheadToTimecodeDialog* dialog = new PlayheadToTimecodeDialog (this, _film->video_frame_rate ()); + PlayheadToTimecodeDialog* dialog = new PlayheadToTimecodeDialog (this, _viewer->position(), _film->video_frame_rate()); if (dialog->ShowModal() == wxID_OK) { _viewer->seek (dialog->get(), true); } diff --git a/src/wx/playhead_to_timecode_dialog.cc b/src/wx/playhead_to_timecode_dialog.cc index c622111db..dda742fbc 100644 --- a/src/wx/playhead_to_timecode_dialog.cc +++ b/src/wx/playhead_to_timecode_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington <cth@carlh.net> + Copyright (C) 2016-2020 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -22,13 +22,14 @@ using namespace dcpomatic; -PlayheadToTimecodeDialog::PlayheadToTimecodeDialog (wxWindow* parent, int fps) +PlayheadToTimecodeDialog::PlayheadToTimecodeDialog (wxWindow* parent, dcpomatic::DCPTime time, int fps) : TableDialog (parent, _("Go to timecode"), 2, 1, true) , _fps (fps) { add (_("Go to"), true); _timecode = add (new Timecode<DCPTime> (this, false)); _timecode->set_focus (); + _timecode->set_hint (time, fps); layout (); } diff --git a/src/wx/playhead_to_timecode_dialog.h b/src/wx/playhead_to_timecode_dialog.h index 226978582..15578cdbe 100644 --- a/src/wx/playhead_to_timecode_dialog.h +++ b/src/wx/playhead_to_timecode_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington <cth@carlh.net> + Copyright (C) 2016-2020 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -24,7 +24,7 @@ class PlayheadToTimecodeDialog : public TableDialog { public: - PlayheadToTimecodeDialog (wxWindow* parent, int fps); + PlayheadToTimecodeDialog (wxWindow* parent, dcpomatic::DCPTime time, int fps); dcpomatic::DCPTime get () const; diff --git a/src/wx/timecode.h b/src/wx/timecode.h index bf658ba83..0c99d5361 100644 --- a/src/wx/timecode.h +++ b/src/wx/timecode.h @@ -81,20 +81,44 @@ public: checked_set (_fixed, t.timecode (fps)); } + void set_hint (T t, float fps) + { + int h; + int m; + int s; + int f; + t.split (fps, h, m, s, f); + + _hours->SetHint (std_to_wx(dcp::raw_convert<std::string>(h))); + _minutes->SetHint (std_to_wx(dcp::raw_convert<std::string>(m))); + _seconds->SetHint (std_to_wx(dcp::raw_convert<std::string>(s))); + _frames->SetHint (std_to_wx(dcp::raw_convert<std::string>(f))); + } + T get (float fps) const { T t; - std::string const h = wx_to_std (_hours->GetValue ()); + std::string const h = value_or_hint (_hours); t += T::from_seconds (dcp::raw_convert<int>(h.empty() ? "0" : h) * 3600); - std::string const m = wx_to_std (_minutes->GetValue()); + std::string const m = value_or_hint (_minutes); t += T::from_seconds (dcp::raw_convert<int>(m.empty() ? "0" : m) * 60); - std::string const s = wx_to_std (_seconds->GetValue()); + std::string const s = value_or_hint (_seconds); t += T::from_seconds (dcp::raw_convert<int>(s.empty() ? "0" : s)); - std::string const f = wx_to_std (_frames->GetValue()); + std::string const f = value_or_hint (_frames); t += T::from_seconds (dcp::raw_convert<double>(f.empty() ? "0" : f) / fps); return t; } + +private: + std::string value_or_hint (wxTextCtrl const * t) const + { + if (!t->GetValue().IsEmpty()) { + return wx_to_std (t->GetValue()); + } else { + return wx_to_std (t->GetHint()); + } + } }; #endif |
