|
4 | 4 | import h5py |
5 | 5 | from itertools import groupby |
6 | 6 | from operator import attrgetter |
| 7 | +import re |
7 | 8 |
|
8 | 9 | from PySide6.QtCore import QObject, Qt |
9 | 10 | from PySide6.QtWidgets import ( |
@@ -44,6 +45,7 @@ def __init__(self, parent=None): |
44 | 45 | self.setup_connections() |
45 | 46 |
|
46 | 47 | def show(self): |
| 48 | + self.create_tree() |
47 | 49 | self.ui.show() |
48 | 50 |
|
49 | 51 | def setup_connections(self): |
@@ -149,6 +151,15 @@ def remove_mask_item(self, name): |
149 | 151 | MaskManager().masks_changed() |
150 | 152 | self.ui.masks_table.verticalScrollBar().setValue(scroll_value) |
151 | 153 |
|
| 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 | + |
152 | 163 | def update_tree(self): |
153 | 164 | if self.ui.masks_tree.topLevelItemCount() == 0: |
154 | 165 | self.create_tree() |
@@ -193,9 +204,11 @@ def create_tree(self): |
193 | 204 | # Create mode item |
194 | 205 | mode_item = self.create_mode_item(mode, source) |
195 | 206 |
|
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)): |
198 | 210 | self.create_mask_item(mode_item, mask) |
| 211 | + |
199 | 212 | self.ui.masks_tree.expandAll() |
200 | 213 | self.ui.masks_tree.resizeColumnToContents(0) |
201 | 214 | self.ui.masks_tree.resizeColumnToContents(1) |
|
0 commit comments