X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilter_view.cc;h=db6728ba58cd45a2ac05ed47148242ae72a89ab7;hb=de4d3d0fdda0f20ccab06877444fc1e5ff362f93;hp=8d9535d812c300bcfd2ff2f70848ed67af1bbf90;hpb=98bbaf1e907e927dbd26131cbdef243a82fdc2d1;p=dcpomatic.git diff --git a/src/wx/filter_view.cc b/src/wx/filter_view.cc index 8d9535d81..db6728ba5 100644 --- a/src/wx/filter_view.cc +++ b/src/wx/filter_view.cc @@ -37,13 +37,38 @@ FilterView::FilterView (wxWindow* parent, vector const & active) vector filters = Filter::all (); + typedef map > CategoryMap; + CategoryMap categories; + for (vector::iterator i = filters.begin(); i != filters.end(); ++i) { - wxCheckBox* b = new wxCheckBox (this, wxID_ANY, std_to_wx ((*i)->name ())); - bool const a = find (active.begin(), active.end(), *i) != active.end (); - b->SetValue (a); - _filters[*i] = b; - b->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilterView::filter_toggled), 0, this); - sizer->Add (b); + CategoryMap::iterator j = categories.find ((*i)->category ()); + if (j == categories.end ()) { + list c; + c.push_back (*i); + categories[(*i)->category()] = c; + } else { + j->second.push_back (*i); + } + } + + for (CategoryMap::iterator i = categories.begin(); i != categories.end(); ++i) { + + wxStaticText* c = new wxStaticText (this, wxID_ANY, std_to_wx (i->first)); + wxFont font = c->GetFont(); + font.SetWeight(wxFONTWEIGHT_BOLD); + c->SetFont(font); + sizer->Add (c); + + for (list::iterator j = i->second.begin(); j != i->second.end(); ++j) { + wxCheckBox* b = new wxCheckBox (this, wxID_ANY, std_to_wx ((*j)->name ())); + bool const a = find (active.begin(), active.end(), *j) != active.end (); + b->SetValue (a); + _filters[*j] = b; + b->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilterView::filter_toggled), 0, this); + sizer->Add (b); + } + + sizer->AddSpacer (6); } }