*/
+
+#include "dcpomatic_button.h"
#include "timecode.h"
#include "wx_util.h"
-#include "dcpomatic_button.h"
#include "lib/util.h"
-#include <iostream>
+
using std::string;
-using std::cout;
+
TimecodeBase::TimecodeBase (wxWindow* parent, bool set_button)
: wxPanel (parent)
_sizer = new wxBoxSizer (wxHORIZONTAL);
+ std::vector<wxTextCtrl*> controls;
+
_editable = new wxPanel (this);
auto editable_sizer = new wxBoxSizer (wxHORIZONTAL);
_hours = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _hours->SetMaxLength (2);
- editable_sizer->Add (_hours);
- add_label_to_sizer (editable_sizer, _editable, wxT(":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_hours);
_minutes = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _minutes->SetMaxLength (2);
- editable_sizer->Add (_minutes);
- add_label_to_sizer (editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_minutes);
_seconds = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _seconds->SetMaxLength (2);
- editable_sizer->Add (_seconds);
- add_label_to_sizer (editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_seconds);
_frames = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _frames->SetMaxLength (2);
- editable_sizer->Add (_frames);
+ controls.push_back(_frames);
+
+ if (parent->GetLayoutDirection() == wxLayout_RightToLeft) {
+ std::reverse(controls.begin(), controls.end());
+ }
+
+ for (auto i = controls.begin(); i != controls.end(); ++i) {
+ (*i)->SetMaxLength(2);
+ editable_sizer->Add(*i);
+ if (std::next(i) != controls.end()) {
+ add_label_to_sizer(editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ }
+ }
if (set_button) {
_set_button = new Button (_editable, _("Set"), wxDefaultPosition, small_button_size(parent, _("Set")));
void
TimecodeBase::changed ()
{
- if (_set_button) {
+ if (_set_button && !_ignore_changed) {
_set_button->Enable (true);
}
}
if (_set_button) {
_set_button->Enable (false);
}
+
+ _ignore_changed = true;
+ if (_hours->GetValue().IsEmpty()) {
+ _hours->SetValue(wxT("0"));
+ }
+ if (_minutes->GetValue().IsEmpty()) {
+ _minutes->SetValue(wxT("0"));
+ }
+ if (_seconds->GetValue().IsEmpty()) {
+ _seconds->SetValue(wxT("0"));
+ }
+ if (_frames->GetValue().IsEmpty()) {
+ _frames->SetValue(wxT("0"));
+ }
+ _ignore_changed = false;
}
void
TimecodeBase::size (wxWindow* parent)
{
wxClientDC dc (parent);
- auto size = dc.GetTextExtent(wxT("9999"));
+#ifdef DCPOMATIC_OSX
+ auto size = dc.GetTextExtent(wxT("999"));
+#else
+ auto size = dc.GetTextExtent(wxT("99999"));
+#endif
size.SetHeight (-1);
return size;
}