Skip to content

Commit 7687708

Browse files
committed
Improve mask name sorting
Break the name into chunks so that we sort strings correctly and sort integers numerically ([1, 2, ..., 10, ..., 20, ...]) rather than as strings ([1, 10, ..., 2, 20, ...]). Signed-off-by: Brianna Major <brianna.major@kitware.com>
1 parent e193745 commit 7687708

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

hexrdgui/masking/mask_manager_dialog.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import h5py
55
from itertools import groupby
66
from operator import attrgetter
7+
import re
78

89
from PySide6.QtCore import QObject, Qt
910
from PySide6.QtWidgets import (
@@ -44,6 +45,7 @@ def __init__(self, parent=None):
4445
self.setup_connections()
4546

4647
def show(self):
48+
self.create_tree()
4749
self.ui.show()
4850

4951
def setup_connections(self):
@@ -149,6 +151,15 @@ def remove_mask_item(self, name):
149151
MaskManager().masks_changed()
150152
self.ui.masks_table.verticalScrollBar().setValue(scroll_value)
151153

154+
155+
def _alphanumeric_sort(self, value):
156+
# Split the string into text and number parts so that we
157+
# sort by string value lexicographically and the number
158+
# value numerically
159+
vals = re.split('([0-9]+)', value)
160+
print([int(v) if v.isdigit() else v.lower() for v in vals])
161+
return [int(v) if v.isdigit() else v.lower() for v in vals]
162+
152163
def update_tree(self):
153164
if self.ui.masks_tree.topLevelItemCount() == 0:
154165
self.create_tree()
@@ -193,9 +204,11 @@ def create_tree(self):
193204
# Create mode item
194205
mode_item = self.create_mode_item(mode, source)
195206

196-
# Create items for each mask
197-
for mask in masks:
207+
# Create items for each mask, sorted naturally by name
208+
for mask in sorted(masks,
209+
key=lambda x: self._alphanumeric_sort(x.name)):
198210
self.create_mask_item(mode_item, mask)
211+
199212
self.ui.masks_tree.expandAll()
200213
self.ui.masks_tree.resizeColumnToContents(0)
201214
self.ui.masks_tree.resizeColumnToContents(1)

0 commit comments

Comments
 (0)