X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftimecode.h;h=0c99d536187cfeb61586cd9a28c1d91a62bebe08;hb=08f96200aacf9f91ef3e3f5b80224a5b2437f279;hp=d9fe4ee4c96af761b0adc5238a82d4a2cd9fa8a9;hpb=b8693a3bf32380733604aa6e80c9774de575ebe7;p=dcpomatic.git diff --git a/src/wx/timecode.h b/src/wx/timecode.h index d9fe4ee4c..0c99d5361 100644 --- a/src/wx/timecode.h +++ b/src/wx/timecode.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -23,9 +23,9 @@ #include "wx_util.h" #include "lib/types.h" +#include #include #include -#include class TimecodeBase : public wxPanel { @@ -35,6 +35,7 @@ public: void clear (); void set_editable (bool); + void set_focus (); boost::signals2::signal Changed; @@ -72,28 +73,52 @@ public: int f; t.split (fps, h, m, s, f); - checked_set (_hours, boost::lexical_cast (h)); - checked_set (_minutes, boost::lexical_cast (m)); - checked_set (_seconds, boost::lexical_cast (s)); - checked_set (_frames, boost::lexical_cast (f)); + checked_set (_hours, dcp::raw_convert(h)); + checked_set (_minutes, dcp::raw_convert(m)); + checked_set (_seconds, dcp::raw_convert(s)); + checked_set (_frames, dcp::raw_convert(f)); checked_set (_fixed, t.timecode (fps)); } - T get (int fps) const + 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(h))); + _minutes->SetHint (std_to_wx(dcp::raw_convert(m))); + _seconds->SetHint (std_to_wx(dcp::raw_convert(s))); + _frames->SetHint (std_to_wx(dcp::raw_convert(f))); + } + + T get (float fps) const { T t; - std::string const h = wx_to_std (_hours->GetValue ()); - t += T::from_seconds (boost::lexical_cast (h.empty() ? "0" : h) * 3600); - std::string const m = wx_to_std (_minutes->GetValue()); - t += T::from_seconds (boost::lexical_cast (m.empty() ? "0" : m) * 60); - std::string const s = wx_to_std (_seconds->GetValue()); - t += T::from_seconds (boost::lexical_cast (s.empty() ? "0" : s)); - std::string const f = wx_to_std (_frames->GetValue()); - t += T::from_seconds (boost::lexical_cast (f.empty() ? "0" : f) / fps); + std::string const h = value_or_hint (_hours); + t += T::from_seconds (dcp::raw_convert(h.empty() ? "0" : h) * 3600); + std::string const m = value_or_hint (_minutes); + t += T::from_seconds (dcp::raw_convert(m.empty() ? "0" : m) * 60); + std::string const s = value_or_hint (_seconds); + t += T::from_seconds (dcp::raw_convert(s.empty() ? "0" : s)); + std::string const f = value_or_hint (_frames); + t += T::from_seconds (dcp::raw_convert(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