diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-05-27 21:54:50 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-05-27 21:54:50 +0100 |
| commit | 6166c045a8de42edd09924fdd995a77a3b753e54 (patch) | |
| tree | 91da3177d9802c0b9da84607eb3c3831ffc975b5 /src/wx/timecode.cc | |
| parent | a4642b6463430175d0f4e1ca284a4bf08bcf4de9 (diff) | |
Support for keeping video in sequence when changing lengths; tie selection in timeline with that in the editor.
Diffstat (limited to 'src/wx/timecode.cc')
| -rw-r--r-- | src/wx/timecode.cc | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/wx/timecode.cc b/src/wx/timecode.cc index 460f7423b..f8cdccbe2 100644 --- a/src/wx/timecode.cc +++ b/src/wx/timecode.cc @@ -22,10 +22,12 @@ #include "wx_util.h" using std::string; +using std::cout; using boost::lexical_cast; Timecode::Timecode (wxWindow* parent) : wxPanel (parent) + , _in_set (false) { wxClientDC dc (parent); wxSize size = dc.GetTextExtent (wxT ("9999")); @@ -58,12 +60,19 @@ Timecode::Timecode (wxWindow* parent) _frames->SetMaxLength (2); sizer->Add (_frames); + _hours->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (Timecode::changed), 0, this); + _minutes->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (Timecode::changed), 0, this); + _seconds->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (Timecode::changed), 0, this); + _frames->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (Timecode::changed), 0, this); + SetSizerAndFit (sizer); } void Timecode::set (Time t, int fps) { + _in_set = true; + int const h = t / (3600 * TIME_HZ); t -= h * 3600 * TIME_HZ; int const m = t / (60 * TIME_HZ); @@ -72,19 +81,35 @@ Timecode::set (Time t, int fps) t -= s * TIME_HZ; int const f = t * fps / TIME_HZ; - _hours->SetValue (wxString::Format ("%02d", h)); - _minutes->SetValue (wxString::Format ("%02d", m)); - _seconds->SetValue (wxString::Format ("%02d", s)); - _frames->SetValue (wxString::Format ("%02d", f)); + _hours->SetValue (wxString::Format (wxT ("%d"), h)); + _minutes->SetValue (wxString::Format (wxT ("%d"), m)); + _seconds->SetValue (wxString::Format (wxT ("%d"), s)); + _frames->SetValue (wxString::Format (wxT ("%d"), f)); + + _in_set = false; } Time Timecode::get (int fps) const { Time t = 0; - t += lexical_cast<int> (wx_to_std (_hours->GetValue())) * 3600 * TIME_HZ; - t += lexical_cast<int> (wx_to_std (_minutes->GetValue())) * 60 * TIME_HZ; - t += lexical_cast<int> (wx_to_std (_seconds->GetValue())) * TIME_HZ; - t += lexical_cast<int> (wx_to_std (_frames->GetValue())) * TIME_HZ / fps; + string const h = wx_to_std (_hours->GetValue ()); + t += lexical_cast<int> (h.empty() ? "0" : h) * 3600 * TIME_HZ; + string const m = wx_to_std (_minutes->GetValue()); + t += lexical_cast<int> (m.empty() ? "0" : m) * 60 * TIME_HZ; + string const s = wx_to_std (_seconds->GetValue()); + t += lexical_cast<int> (s.empty() ? "0" : s) * TIME_HZ; + string const f = wx_to_std (_frames->GetValue()); + t += lexical_cast<int> (f.empty() ? "0" : f) * TIME_HZ / fps; return t; } + +void +Timecode::changed (wxCommandEvent &) +{ + if (_in_set) { + return; + } + + Changed (); +} |
