From 655414978590f5cdf2596cdd655c9de1bf5644a4 Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 2 Oct 2022 07:51:57 +0200 Subject: [PATCH] #6107: Sort layers by name --- radiant/ui/layers/LayerControlDialog.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/radiant/ui/layers/LayerControlDialog.cpp b/radiant/ui/layers/LayerControlDialog.cpp index ee46d7ec1b..59f7436808 100644 --- a/radiant/ui/layers/LayerControlDialog.cpp +++ b/radiant/ui/layers/LayerControlDialog.cpp @@ -142,8 +142,8 @@ void LayerControlDialog::queueUpdate() class LayerControlDialog::TreePopulator { private: - const wxutil::TreeModel::Ptr& _layerStore; const TreeColumns& _columns; + wxutil::TreeModel::Ptr _layerStore; std::map _layerItemMap; @@ -155,8 +155,8 @@ class LayerControlDialog::TreePopulator public: TreePopulator(const wxutil::TreeModel::Ptr& layerStore, const TreeColumns& columns) : - _layerStore(layerStore), _columns(columns), + _layerStore(new wxutil::TreeModel(_columns)), _layerManager(GlobalMapModule().getRoot()->getLayerManager()), _activeLayerId(_layerManager.getActiveLayer()) {} @@ -176,6 +176,11 @@ class LayerControlDialog::TreePopulator return _layerItemMap; } + const wxutil::TreeModel::Ptr& getLayerStore() const + { + return _layerStore; + } + wxDataViewItem processLayer(int layerId, const std::string& layerName) { auto existingItem = _layerItemMap.find(layerId); @@ -245,6 +250,13 @@ void LayerControlDialog::refresh() layerManager.foreachLayer( std::bind(&TreePopulator::processLayer, &populator, std::placeholders::_1, std::placeholders::_2)); + // Get the model and sort each hierarchy level by name + _layerStore = populator.getLayerStore(); + _layerStore->SortModelByColumn(_columns.name); + + // Now associate the layer store with our tree view + _layersView->AssociateModel(_layerStore.get()); + _layerItemMap = std::move(populator.getLayerItemMap()); // Restore the expanded state of tree elements