diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-16 00:46:26 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-16 00:46:26 +0100 |
| commit | 5b7c8b06f7d9ea910020b4620c234cf0dce95a66 (patch) | |
| tree | 82591e59c6f48d1bae95a45e01d54e4e706dfbd0 /src/wx/time_picker.cc | |
| parent | faeda64d4829a3717762778f48607f1cb750f4d5 (diff) | |
Remove seconds from KDM time period specification (#819).
Diffstat (limited to 'src/wx/time_picker.cc')
| -rw-r--r-- | src/wx/time_picker.cc | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/wx/time_picker.cc b/src/wx/time_picker.cc new file mode 100644 index 000000000..2528d737e --- /dev/null +++ b/src/wx/time_picker.cc @@ -0,0 +1,118 @@ +/* + Copyright (C) 2016 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "time_picker.h" +#include "lib/raw_convert.h" +#include <wx/spinctrl.h> +#include <boost/bind.hpp> +#include <iomanip> + +using std::setfill; +using std::setw; +using std::min; +using std::max; +using std::string; +using std::cout; +using boost::bind; + +TimePicker::TimePicker (wxWindow* parent, wxDateTime time) + : wxPanel (parent) + , _block_update (false) +{ + wxClientDC dc (parent); + wxSize size = dc.GetTextExtent (wxT ("9999")); + 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); + + 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); + + 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 (raw_convert<string> (_hours_spin->GetValue ()))); + + SafeStringStream m; + m << setfill('0') << setw(2) << _minutes_spin->GetValue(); + _minutes->SetValue (wxString (m.str())); + + _block_update = false; + + Changed (); +} + +void +TimePicker::update_spin () +{ + if (_block_update) { + return; + } + + _block_update = true; + _hours_spin->SetValue (raw_convert<int> (_hours->GetValue().ToStdString())); + _minutes_spin->SetValue (raw_convert<int> (_minutes->GetValue().ToStdString())); + _block_update = false; + + Changed (); +} + +int +TimePicker::hours () const +{ + return _hours_spin->GetValue(); +} + +int +TimePicker::minutes () const +{ + return _minutes_spin->GetValue(); +} |
