X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fkdm_timing_panel.cc;h=998cd5a812c5158f0aa3a7f4701db1ddd2f65d2c;hb=e9ae050b0b15c91c3f591ad84938e60d271357b3;hp=a07929b99ea7836ca1ece174670425877b8b6058;hpb=5b7c8b06f7d9ea910020b4620c234cf0dce95a66;p=dcpomatic.git diff --git a/src/wx/kdm_timing_panel.cc b/src/wx/kdm_timing_panel.cc index a07929b99..998cd5a81 100644 --- a/src/wx/kdm_timing_panel.cc +++ b/src/wx/kdm_timing_panel.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2015-2016 Carl Hetherington + Copyright (C) 2015-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -21,8 +21,12 @@ #include "kdm_timing_panel.h" #include "wx_util.h" #include "time_picker.h" +#include "static_text.h" +#include "lib/warnings.h" +DCPOMATIC_DISABLE_WARNINGS #include #include +DCPOMATIC_ENABLE_WARNINGS using std::cout; using boost::bind; @@ -32,27 +36,59 @@ KDMTimingPanel::KDMTimingPanel (wxWindow* parent) { wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); - wxFlexGridSizer* table = new wxFlexGridSizer (6, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); - add_label_to_sizer (table, this, _("From"), true); +#ifdef __WXGTK3__ + /* wxDatePickerCtrl is too small with the GTK3 backend so we need to make it bigger with some fudge factors */ + wxClientDC dc (parent); + wxSize size = dc.GetTextExtent (wxT("99/99/9999")); + size.SetWidth (size.GetWidth() * 1.75); + size.SetHeight (-1); +#else + wxSize size = wxDefaultSize; +#endif + + wxSizer* table = new wxBoxSizer (wxHORIZONTAL); + add_label_to_sizer (table, this, _("From"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); wxDateTime from; from.SetToCurrent (); - _from_date = new wxDatePickerCtrl (this, wxID_ANY, from); - table->Add (_from_date, 1, wxEXPAND); - _from_time = new TimePicker (this, from); - table->Add (_from_time, 0); - - add_label_to_sizer (table, this, _("until"), true); + _from_date = new wxDatePickerCtrl (this, wxID_ANY, from, wxDefaultPosition, size); +#ifdef DCPOMATIC_OSX + /* Hack to tweak alignment, which I can't get right by "proper" means for some reason */ + table->Add (_from_date, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 4); +#else + table->Add (_from_date, 0, wxALIGN_CENTER_VERTICAL); +#endif + +#ifdef __WXGTK3__ + _from_time = new TimePickerText (this, from); +#else + _from_time = new TimePickerSpin (this, from); +#endif + + table->Add (_from_time, 0, wxALIGN_CENTER_VERTICAL); + + add_label_to_sizer (table, this, _("until"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); wxDateTime to = from; /* 1 week from now */ to.Add (wxDateSpan (0, 0, 1, 0)); - _until_date = new wxDatePickerCtrl (this, wxID_ANY, to); - table->Add (_until_date, 1, wxEXPAND); - _until_time = new TimePicker (this, to); - table->Add (_until_time, 0); + _until_date = new wxDatePickerCtrl (this, wxID_ANY, to, wxDefaultPosition, size); +#ifdef DCPOMATIC_OSX + /* Hack to tweak alignment, which I can't get right by "proper" means for some reason */ + table->Add (_until_date, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 4); +#else + table->Add (_until_date, 0, wxALIGN_CENTER_VERTICAL); +#endif + +#ifdef __WXGTK3__ + _until_time = new TimePickerText (this, to); +#else + _until_time = new TimePickerSpin (this, to); +#endif - overall_sizer->Add (table); + table->Add (_until_time, 0, wxALIGN_CENTER_VERTICAL); - _warning = new wxStaticText (this, wxID_ANY, wxT ("")); + overall_sizer->Add (table, 0, wxTOP, DCPOMATIC_SIZER_GAP); + + _warning = new StaticText (this, wxT("")); overall_sizer->Add (_warning, 0, wxTOP, DCPOMATIC_SIZER_GAP); wxFont font = _warning->GetFont(); font.SetStyle(wxFONTSTYLE_ITALIC); @@ -60,6 +96,12 @@ KDMTimingPanel::KDMTimingPanel (wxWindow* parent) _warning->SetForegroundColour (wxColour (255, 0, 0)); _warning->SetFont(font); + /* I said I've been to the year 3000. Not much has changed but they live underwater. And your In-in-in-interop DCP + is pretty fine. + */ + _from_date->SetRange(wxDateTime(1, wxDateTime::Jan, 1900, 0, 0, 0, 0), wxDateTime(31, wxDateTime::Dec, 3000, 0, 0, 0, 0)); + _until_date->SetRange(wxDateTime(1, wxDateTime::Jan, 1900, 0, 0, 0, 0), wxDateTime(31, wxDateTime::Dec, 3000, 0, 0, 0, 0)); + _from_date->Bind (wxEVT_DATE_CHANGED, bind (&KDMTimingPanel::changed, this)); _until_date->Bind (wxEVT_DATE_CHANGED, bind (&KDMTimingPanel::changed, this)); _from_time->Changed.connect (bind (&KDMTimingPanel::changed, this));