Replace class shim with a custom comparator.
authorCarl Hetherington <cth@carlh.net>
Sun, 13 Mar 2022 20:10:36 +0000 (21:10 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 17 Mar 2022 21:20:04 +0000 (22:20 +0100)
src/wx/screens_panel.cc
src/wx/screens_panel.h

index 02ef2f62cf396b4f2f8ef2e606088e51461ef3ca..90fb71246c7c2a057eb3ddfca63a7a903db52e3b 100644 (file)
@@ -55,9 +55,10 @@ ScreensPanel::ScreensPanel (wxWindow* parent)
        sizer->Add (_search, 0, wxBOTTOM, DCPOMATIC_SIZER_GAP);
 
        auto targets = new wxBoxSizer (wxHORIZONTAL);
-       _targets = new TreeListCtrl (this);
+       _targets = new wxTreeListCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTL_MULTIPLE | wxTL_3STATE | wxTL_NO_HEADER);
        _targets->AppendColumn (wxT("foo"));
        _targets->SetSortColumn (0);
+       _targets->SetItemComparator (&_comparator);
 
        targets->Add (_targets, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_GAP);
 
@@ -502,14 +503,3 @@ ScreensPanel::checkbox_changed (wxTreeListEvent& ev)
 }
 
 
-
-wxIMPLEMENT_DYNAMIC_CLASS (TreeListCtrl, wxTreeListCtrl);
-
-
-int
-TreeListCtrl::OnCompareItems (wxTreeListItem const& a, wxTreeListItem const& b)
-{
-       return strcoll (wx_to_std(GetItemText(a)).c_str(), wx_to_std(GetItemText(b)).c_str());
-}
-
-
index 4885a84541eb42703f7b25f0b0601dca6a584a60..fc7e9751cc916614186005219c3a8273922c60ae 100644 (file)
@@ -36,25 +36,6 @@ namespace dcpomatic {
 class Cinema;
 
 
-/** Shim around wxTreeListCtrl so we can use strcoll() to compare things */
-class TreeListCtrl : public wxTreeListCtrl
-{
-public:
-       wxDECLARE_DYNAMIC_CLASS (TreeListCtrl);
-
-       TreeListCtrl () {}
-
-       TreeListCtrl (wxWindow* parent)
-               : wxTreeListCtrl (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTL_MULTIPLE | wxTL_3STATE | wxTL_NO_HEADER)
-       {}
-
-       virtual ~TreeListCtrl () {}
-
-private:
-       int OnCompareItems (wxTreeListItem const& a, wxTreeListItem const& b);
-};
-
-
 class ScreensPanel : public wxPanel
 {
 public:
@@ -83,7 +64,7 @@ private:
        boost::optional<std::pair<wxTreeListItem, std::shared_ptr<Cinema>>> cinema_for_operation () const;
 
        wxSearchCtrl* _search;
-       TreeListCtrl* _targets;
+       wxTreeListCtrl* _targets;
        wxButton* _add_cinema;
        wxButton* _edit_cinema;
        wxButton* _remove_cinema;
@@ -100,4 +81,15 @@ private:
        ScreenMap _selected_screens;
 
        bool _ignore_selection_change;
+
+       class Comparator : public wxTreeListItemComparator
+       {
+       public:
+               int Compare (wxTreeListCtrl* tree_list, unsigned, wxTreeListItem a, wxTreeListItem b) override
+               {
+                       return strcoll(wx_to_std(tree_list->GetItemText(a)).c_str(), wx_to_std(tree_list->GetItemText(b)).c_str());
+               }
+       };
+
+       Comparator _comparator;
 };