From 81e16caf6414a011bbbe6e8c788f9dc1e4c0ce52 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 4 Feb 2021 00:03:50 +0100 Subject: [PATCH] Use strcoll() to compare cinemas/screens in the KDM dialog (#1904). --- src/wx/screens_panel.cc | 13 ++++++++++++- src/wx/screens_panel.h | 23 ++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc index 6bc821feb..8d631ce90 100644 --- a/src/wx/screens_panel.cc +++ b/src/wx/screens_panel.cc @@ -61,7 +61,7 @@ ScreensPanel::ScreensPanel (wxWindow* parent) 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 (); @@ -455,3 +455,14 @@ ScreensPanel::search_changed () _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()); +} + diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h index 70b12a1d6..7703d69aa 100644 --- a/src/wx/screens_panel.h +++ b/src/wx/screens_panel.h @@ -32,8 +32,29 @@ namespace dcpomatic { class Screen; } + 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: @@ -60,7 +81,7 @@ private: void search_changed (); wxSearchCtrl* _search; - wxTreeCtrl* _targets; + TreeCtrl* _targets; wxButton* _add_cinema; wxButton* _edit_cinema; wxButton* _remove_cinema; -- 2.30.2