X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fwx_util.cc;h=91fd426247a94e40caaa82a547796864706e3c5c;hb=475f587f08a7cb1b915be37050abc0b09f6bfc67;hp=d732e03d305259d37d71b55291afb22146a53da4;hpb=15a5f157f7867a05211ce494d9d86b9c47fdf72b;p=dcpomatic.git diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index d732e03d3..91fd42624 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -30,12 +30,28 @@ #include #include #include +#include #include using namespace std; using namespace boost; using dcp::locale_convert; +wxStaticText * +#ifdef __WXOSX__ +create_label (wxWindow* p, wxString t, bool left) +#else +create_label (wxWindow* p, wxString t, bool) +#endif +{ +#ifdef __WXOSX__ + if (left) { + t += wxT (":"); + } +#endif + return new wxStaticText (p, wxID_ANY, t); +} + /** Add a wxStaticText to a wxSizer, aligning it at vertical centre. * @param s Sizer to add to. * @param p Parent window for the wxStaticText. @@ -44,52 +60,78 @@ using dcp::locale_convert; * of label which should be right-aligned on OS X. * @param prop Proportion to pass when calling Add() on the wxSizer. */ +wxStaticText * +add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool left, int prop, int flags) +{ +#ifdef __WXOSX__ + if (left) { + flags |= wxALIGN_RIGHT; + } +#endif + wxStaticText* m = create_label (p, t, left); + s->Add (m, prop, flags, 6); + return m; +} + wxStaticText * #ifdef __WXOSX__ -add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool left, int prop) +add_label_to_sizer (wxSizer* s, wxStaticText* t, bool left, int prop, int flags) #else -add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool, int prop) +add_label_to_sizer (wxSizer* s, wxStaticText* t, bool, int prop, int flags) #endif +{ +#ifdef __WXOSX__ + if (left) { + flags |= wxALIGN_RIGHT; + } +#endif + s->Add (t, prop, flags, 6); + return t; +} + +wxStaticText * +add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool left, wxGBPosition pos, wxGBSpan span) { int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT; #ifdef __WXOSX__ if (left) { flags |= wxALIGN_RIGHT; - t += wxT (":"); } #endif - wxStaticText* m = new wxStaticText (p, wxID_ANY, t); - s->Add (m, prop, flags, 6); + wxStaticText* m = create_label (p, t, left); + s->Add (m, pos, span, flags); return m; } wxStaticText * #ifdef __WXOSX__ -add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool left, wxGBPosition pos, wxGBSpan span) +add_label_to_sizer (wxGridBagSizer* s, wxStaticText* t, bool left, wxGBPosition pos, wxGBSpan span) #else -add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool, wxGBPosition pos, wxGBSpan span) +add_label_to_sizer (wxGridBagSizer* s, wxStaticText* t, bool, wxGBPosition pos, wxGBSpan span) #endif { int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT; #ifdef __WXOSX__ if (left) { flags |= wxALIGN_RIGHT; - t += wxT (":"); } #endif - wxStaticText* m = new wxStaticText (p, wxID_ANY, t); - s->Add (m, pos, span, flags); - return m; + s->Add (t, pos, span, flags); + return t; } /** Pop up an error dialogue box. * @param parent Parent. * @param m Message. + * @param e Extended message. */ void -error_dialog (wxWindow* parent, wxString m) +error_dialog (wxWindow* parent, wxString m, optional e) { wxMessageDialog* d = new wxMessageDialog (parent, m, _("DCP-o-matic"), wxOK | wxICON_ERROR); + if (e) { + d->SetExtendedMessage (*e); + } d->ShowModal (); d->Destroy (); } @@ -154,6 +196,20 @@ checked_set (FilePickerCtrl* widget, boost::filesystem::path value) } } +void +checked_set (wxDirPickerCtrl* widget, boost::filesystem::path value) +{ + if (widget->GetPath() != std_to_wx (value.string())) { + if (value.empty()) { + /* Hack to make wxWidgets clear the control when we are passed + an empty value. + */ + value = " "; + } + widget->SetPath (std_to_wx (value.string())); + } +} + void checked_set (wxSpinCtrl* widget, int value) { @@ -410,3 +466,26 @@ path_from_file_dialog (wxFileDialog* dialog, string extension) { return boost::filesystem::path(wx_to_std(dialog->GetPath())).replace_extension(extension); } + +double +calculate_mark_interval (double mark_interval) +{ + if (mark_interval > 5) { + mark_interval -= lrint (mark_interval) % 5; + } + if (mark_interval > 10) { + mark_interval -= lrint (mark_interval) % 10; + } + if (mark_interval > 60) { + mark_interval -= lrint (mark_interval) % 60; + } + if (mark_interval > 3600) { + mark_interval -= lrint (mark_interval) % 3600; + } + + if (mark_interval < 1) { + mark_interval = 1; + } + + return mark_interval; +}