Use strcoll() to compare cinemas/screens in the KDM dialog (#1904).
authorCarl Hetherington <cth@carlh.net>
Wed, 3 Feb 2021 23:03:50 +0000 (00:03 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 3 Feb 2021 23:03:50 +0000 (00:03 +0100)
src/wx/screens_panel.cc
src/wx/screens_panel.h

index 6bc821feb42a829b74dd741bb8e8062a560eb0ae..8d631ce905257d7ef625c34c74abc81459d19fb5 100644 (file)
@@ -61,7 +61,7 @@ ScreensPanel::ScreensPanel (wxWindow* parent)
        sizer->Add (_search, 0, wxBOTTOM, DCPOMATIC_SIZER_GAP);
 
        auto targets = new wxBoxSizer (wxHORIZONTAL);
        sizer->Add (_search, 0, wxBOTTOM, DCPOMATIC_SIZER_GAP);
 
        auto targets = new wxBoxSizer (wxHORIZONTAL);
-       _targets = new wxTreeCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT | wxTR_MULTIPLE | wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT);
+       _targets = new TreeCtrl (this);
        targets->Add (_targets, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_GAP);
 
        add_cinemas ();
        targets->Add (_targets, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_GAP);
 
        add_cinemas ();
@@ -455,3 +455,14 @@ ScreensPanel::search_changed ()
 
        _ignore_selection_change = false;
 }
 
        _ignore_selection_change = false;
 }
+
+
+wxIMPLEMENT_DYNAMIC_CLASS (TreeCtrl, wxTreeCtrl);
+
+
+int
+TreeCtrl::OnCompareItems (wxTreeItemId const& a, wxTreeItemId const& b)
+{
+       return strcoll (wx_to_std(GetItemText(a)).c_str(), wx_to_std(GetItemText(b)).c_str());
+}
+
index 70b12a1d656451b4e8eb666bc9ce0c2f2f0a7492..7703d69aad1cec27e1ebf90ec5a6fc6272d02036 100644 (file)
@@ -32,8 +32,29 @@ namespace dcpomatic {
        class Screen;
 }
 
        class Screen;
 }
 
+
 class Cinema;
 
 class Cinema;
 
+
+/** Shim around wxTreeCtrl so we can use strcoll() to compare things */
+class TreeCtrl : public wxTreeCtrl
+{
+public:
+       wxDECLARE_DYNAMIC_CLASS (TreeCtrl);
+
+       TreeCtrl () {}
+
+       TreeCtrl (wxWindow* parent)
+               : wxTreeCtrl (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT | wxTR_MULTIPLE | wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT)
+       {}
+
+       virtual ~TreeCtrl () {}
+
+private:
+       int OnCompareItems (wxTreeItemId const& a, wxTreeItemId const& b);
+};
+
+
 class ScreensPanel : public wxPanel
 {
 public:
 class ScreensPanel : public wxPanel
 {
 public:
@@ -60,7 +81,7 @@ private:
        void search_changed ();
 
        wxSearchCtrl* _search;
        void search_changed ();
 
        wxSearchCtrl* _search;
-       wxTreeCtrl* _targets;
+       TreeCtrl* _targets;
        wxButton* _add_cinema;
        wxButton* _edit_cinema;
        wxButton* _remove_cinema;
        wxButton* _add_cinema;
        wxButton* _edit_cinema;
        wxButton* _remove_cinema;