X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Feditable_list.h;h=3f2ea0ca2fe0afad40f7a1e2b5512e6c817282ac;hb=a70ec9be6a312c63e7655b3a266cbf353e8e1795;hp=3ee4359bf8022cfb10c55373745f92bde92836f5;hpb=14b8b29e6660f5a7fb21135fb5f90b4c1ce51a4b;p=dcpomatic.git diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h index 3ee4359bf..3f2ea0ca2 100644 --- a/src/wx/editable_list.h +++ b/src/wx/editable_list.h @@ -25,24 +25,23 @@ #include "dcpomatic_button.h" #include #include -#include #include class EditableListColumn { public: - EditableListColumn (std::string name_) + EditableListColumn (wxString name_) : name (name_) , growable (false) {} - EditableListColumn (std::string name_, boost::optional width_, bool growable_) + EditableListColumn (wxString name_, boost::optional width_, bool growable_) : name (name_) , width (width_) , growable (growable_) {} - std::string name; + wxString name; boost::optional width; bool growable; }; @@ -60,9 +59,9 @@ public: EditableList ( wxWindow* parent, std::vector columns, - boost::function ()> get, - boost::function)> set, - boost::function column, + std::function ()> get, + std::function)> set, + std::function column, bool can_edit = true, bool title = true ) @@ -78,38 +77,53 @@ public: SetSizer (_sizer); long style = wxLC_REPORT | wxLC_SINGLE_SEL; - if (title) { + if (!title) { style |= wxLC_NO_HEADER; } int total_width = 0; - BOOST_FOREACH (EditableListColumn i, _columns) { + for (auto i: _columns) { total_width += i.width.get_value_or (_default_width); } +#ifdef __WXGTK3__ + /* With the GTK3 backend wxListCtrls are hard to pick out from the background of the + * window, so put a border in to help. + */ + wxPanel* border = new wxPanel (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_THEME); + _list = new wxListCtrl (border, wxID_ANY, wxDefaultPosition, wxSize(total_width, 100), style); + wxBoxSizer* border_sizer = new wxBoxSizer (wxHORIZONTAL); + border_sizer->Add (_list, 1, wxALL | wxEXPAND, 2); + border->SetSizer (border_sizer); +#else _list = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize(total_width, 100), style); +#endif int j = 0; - BOOST_FOREACH (EditableListColumn i, _columns) { + for (auto i: _columns) { wxListItem ip; ip.SetId (j); - ip.SetText (std_to_wx(i.name)); + ip.SetText (i.name); _list->InsertColumn (j, ip); ++j; } +#ifdef __WXGTK3__ + _sizer->Add (border, 1, wxEXPAND); +#else _sizer->Add (_list, 1, wxEXPAND); +#endif { wxSizer* s = new wxBoxSizer (wxVERTICAL); _add = new Button (this, _("Add...")); - s->Add (_add, 0, wxTOP | wxBOTTOM, 2); + s->Add (_add, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); if (can_edit) { _edit = new Button (this, _("Edit...")); - s->Add (_edit, 0, wxTOP | wxBOTTOM, 2); + s->Add (_edit, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); } _remove = new Button (this, _("Remove")); - s->Add (_remove, 0, wxTOP | wxBOTTOM, 2); + s->Add (_remove, 1, wxEXPAND | wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); _sizer->Add (s, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); } @@ -121,7 +135,11 @@ public: _list->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, boost::bind (&EditableList::selection_changed, this)); _list->Bind (wxEVT_COMMAND_LIST_ITEM_DESELECTED, boost::bind (&EditableList::selection_changed, this)); +#if BOOST_VERSION >= 106100 + _list->Bind (wxEVT_SIZE, boost::bind (&EditableList::resized, this, boost::placeholders::_1)); +#else _list->Bind (wxEVT_SIZE, boost::bind (&EditableList::resized, this, _1)); +#endif refresh (); selection_changed (); @@ -249,7 +267,7 @@ private: int fixed_width = 0; int growable = 0; int j = 0; - BOOST_FOREACH (EditableListColumn i, _columns) { + for (auto i: _columns) { fixed_width += i.width.get_value_or (_default_width); if (!i.growable) { _list->SetColumnWidth (j, i.width.get_value_or(_default_width)); @@ -260,7 +278,7 @@ private: } j = 0; - BOOST_FOREACH (EditableListColumn i, _columns) { + for (auto i: _columns) { if (i.growable) { _list->SetColumnWidth (j, i.width.get_value_or(_default_width) + (w - fixed_width) / growable); } @@ -270,10 +288,10 @@ private: ev.Skip (); } - boost::function ()> _get; - boost::function )> _set; + std::function ()> _get; + std::function )> _set; std::vector _columns; - boost::function _column; + std::function _column; wxButton* _add; wxButton* _edit;