X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fkdm_timing_panel.cc;h=0fd00de93bb866f45a065e78a83b82ec842aa390;hb=693013b77341e4177c792de091ab9a524e33c477;hp=e0e5ac44f4a3c87b9dcc3e3982ec26fb23bd5af9;hpb=7f05d8fd54632f72a09b6be1b8b4cf692f290b55;p=dcpomatic.git diff --git a/src/wx/kdm_timing_panel.cc b/src/wx/kdm_timing_panel.cc index e0e5ac44f..0fd00de93 100644 --- a/src/wx/kdm_timing_panel.cc +++ b/src/wx/kdm_timing_panel.cc @@ -18,49 +18,94 @@ */ + #include "kdm_timing_panel.h" -#include "wx_util.h" -#include "time_picker.h" #include "static_text.h" +#include "time_picker.h" +#include "wx_util.h" +#include "lib/config.h" +#include +LIBDCP_DISABLE_WARNINGS #include #include +LIBDCP_ENABLE_WARNINGS + using std::cout; using boost::bind; + KDMTimingPanel::KDMTimingPanel (wxWindow* parent) : wxPanel (parent, wxID_ANY) { - wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + auto overall_sizer = new wxBoxSizer (wxVERTICAL); + +#ifdef __WXGTK3__ + /* wxDatePickerCtrl is too small with the GTK3 backend so we need to make it bigger with some fudge factors */ + wxClientDC dc (parent); + auto size = dc.GetTextExtent(wxT("99/99/9999")); + size.SetWidth (size.GetWidth() * 1.75); + size.SetHeight (-1); +#else + auto size = wxDefaultSize; +#endif - wxSizer* table = new wxBoxSizer (wxHORIZONTAL); - add_label_to_sizer (table, this, _("From"), true); + auto 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, 0, wxALIGN_CENTER_VERTICAL); - _from_time = new TimePicker (this, from); + _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_time, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 4); + table->Add (_from_date, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 4); #else - table->Add (_from_time, 0, wxALIGN_CENTER_VERTICAL); + table->Add (_from_date, 0, wxALIGN_CENTER_VERTICAL); #endif - add_label_to_sizer (table, this, _("until"), true); - 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, 0, wxALIGN_CENTER_VERTICAL); - _until_time = new TimePicker (this, to); +#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); + auto to = from; + + auto const duration = Config::instance()->default_kdm_duration(); + switch (duration.unit) { + case RoughDuration::Unit::DAYS: + to.Add(wxDateSpan(0, 0, 0, duration.duration)); + break; + case RoughDuration::Unit::WEEKS: + to.Add(wxDateSpan(0, 0, duration.duration, 0)); + break; + case RoughDuration::Unit::MONTHS: + to.Add(wxDateSpan(0, duration.duration, 0, 0)); + break; + case RoughDuration::Unit::YEARS: + to.Add(wxDateSpan(duration.duration, 0, 0, 0)); + break; + } + + _until_date = new wxDatePickerCtrl (this, wxID_ANY, to, wxDefaultPosition, size); #ifdef DCPOMATIC_OSX - table->Add (_until_time, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 4); + /* 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_time, 0, wxALIGN_CENTER_VERTICAL); + 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); + + overall_sizer->Add (table, 0, wxTOP, DCPOMATIC_SIZER_GAP); _warning = new StaticText (this, wxT("")); overall_sizer->Add (_warning, 0, wxTOP, DCPOMATIC_SIZER_GAP); @@ -84,34 +129,39 @@ KDMTimingPanel::KDMTimingPanel (wxWindow* parent) SetSizer (overall_sizer); } + boost::posix_time::ptime KDMTimingPanel::from () const { return posix_time (_from_date, _from_time); } + boost::posix_time::ptime KDMTimingPanel::posix_time (wxDatePickerCtrl* date_picker, TimePicker* time_picker) { - wxDateTime const date = date_picker->GetValue (); + auto const date = date_picker->GetValue (); return boost::posix_time::ptime ( boost::gregorian::date (date.GetYear(), date.GetMonth() + 1, date.GetDay()), boost::posix_time::time_duration (time_picker->hours(), time_picker->minutes(), 0) ); } + boost::posix_time::ptime KDMTimingPanel::until () const { return posix_time (_until_date, _until_time); } + bool KDMTimingPanel::valid () const { return until() > from(); } + void KDMTimingPanel::changed () const {