X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftime_picker.cc;h=295bbd52d327c6a0c3db226c9756bf3c96733bc8;hb=3044ef060894c62e8a1cef15ad14078001093982;hp=bddf615d0c68ce1ed276787c115a3206aede1dea;hpb=94056bf7f8fdef32da3cd78eff68d58560b4e6be;p=dcpomatic.git diff --git a/src/wx/time_picker.cc b/src/wx/time_picker.cc index bddf615d0..295bbd52d 100644 --- a/src/wx/time_picker.cc +++ b/src/wx/time_picker.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -20,7 +20,8 @@ #include "time_picker.h" #include "wx_util.h" -#include "lib/locale_convert.h" +#include "static_text.h" +#include #include #include #include @@ -32,85 +33,49 @@ using std::max; using std::string; using std::cout; using boost::bind; +using dcp::locale_convert; TimePicker::TimePicker (wxWindow* parent, wxDateTime time) : wxPanel (parent) - , _block_update (false) { wxClientDC dc (parent); - wxSize size = dc.GetTextExtent (wxT ("9999")); + wxSize size = dc.GetTextExtent (wxT ("9999999")); size.SetHeight (-1); wxBoxSizer* sizer = new wxBoxSizer (wxHORIZONTAL); - _hours = new wxTextCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, size); - _hours->SetMaxLength (2); - sizer->Add (_hours, 0); - _hours_spin = new wxSpinButton (this, wxID_ANY); - sizer->Add (_hours_spin, 0, wxLEFT | wxRIGHT, 2); - sizer->Add (new wxStaticText (this, wxID_ANY, wxT (":")), 0, wxALIGN_CENTER_VERTICAL); - _minutes = new wxTextCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, size); - _minutes->SetMaxLength (2); - sizer->Add (_minutes, 0); - _minutes_spin = new wxSpinButton (this, wxID_ANY); - sizer->Add (_minutes_spin, 0, wxLEFT | wxRIGHT, 2); + _hours = new wxSpinCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, size); + sizer->Add (_hours, 1, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); + sizer->Add (new StaticText (this, wxT (":")), 0, wxALIGN_CENTER_VERTICAL); + _minutes = new wxSpinCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, size); + sizer->Add (_minutes, 1, wxEXPAND | wxRIGHT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); SetSizerAndFit (sizer); _minutes->MoveAfterInTabOrder (_hours); - _hours_spin->SetValue (time.GetHour ()); - _hours_spin->SetRange (0, 23); - _minutes_spin->SetValue (time.GetMinute ()); - _minutes_spin->SetRange (0, 59); + _hours->SetValue (time.GetHour ()); + _hours->SetRange (0, 23); + _minutes->SetValue (time.GetMinute ()); + _minutes->SetRange (0, 59); - update_text (); - - _hours->Bind (wxEVT_COMMAND_TEXT_UPDATED, (bind (&TimePicker::update_spin, this))); - _minutes->Bind (wxEVT_COMMAND_TEXT_UPDATED, (bind (&TimePicker::update_spin, this))); - _hours_spin->Bind (wxEVT_SPIN, bind (&TimePicker::update_text, this)); - _minutes_spin->Bind (wxEVT_SPIN, bind (&TimePicker::update_text, this)); -} - -void -TimePicker::update_text () -{ - if (_block_update) { - return; - } - - _block_update = true; - - _hours->SetValue (wxString::Format ("%d", _hours_spin->GetValue ())); - _minutes->SetValue (wxString::Format ("%02d", _minutes_spin->GetValue ())); - - _block_update = false; - - Changed (); + _hours->Bind (wxEVT_SPINCTRL, (bind (&TimePicker::spin_changed, this))); + _minutes->Bind (wxEVT_SPINCTRL, (bind (&TimePicker::spin_changed, this))); } void -TimePicker::update_spin () +TimePicker::spin_changed () { - if (_block_update) { - return; - } - - _block_update = true; - _hours_spin->SetValue (locale_convert (wx_to_std (_hours->GetValue()))); - _minutes_spin->SetValue (locale_convert (wx_to_std (_minutes->GetValue()))); - _block_update = false; - Changed (); } int TimePicker::hours () const { - return _hours_spin->GetValue(); + return _hours->GetValue(); } int TimePicker::minutes () const { - return _minutes_spin->GetValue(); + return _minutes->GetValue(); }