X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftimecode.h;h=0c99d536187cfeb61586cd9a28c1d91a62bebe08;hb=40d38c8d011f0863f396f21cd750cdcef803a792;hp=18508847b3af4e0b2f1ddf225f339c1afa7e7be5;hpb=b5335ed37e52c216a6773789c0edba5f335c8df2;p=dcpomatic.git diff --git a/src/wx/timecode.h b/src/wx/timecode.h index 18508847b..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 { @@ -73,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)); } + 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