|
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): |
@@ -146,6 +148,15 @@ def remove_mask_item(self, name): |
146 | 148 | self.mask_tree_items.pop(parent.text(0)) |
147 | 149 | MaskManager().masks_changed() |
148 | 150 |
|
| 151 | + |
| 152 | + def _alphanumeric_sort(self, value): |
| 153 | + # Split the string into text and number parts so that we |
| 154 | + # sort by string value lexicographically and the number |
| 155 | + # value numerically |
| 156 | + vals = re.split('([0-9]+)', value) |
| 157 | + print([int(v) if v.isdigit() else v.lower() for v in vals]) |
| 158 | + return [int(v) if v.isdigit() else v.lower() for v in vals] |
| 159 | + |
149 | 160 | def update_tree(self): |
150 | 161 | if self.ui.masks_tree.topLevelItemCount() == 0: |
151 | 162 | self.create_tree() |
@@ -190,9 +201,11 @@ def create_tree(self): |
190 | 201 | # Create mode item |
191 | 202 | mode_item = self.create_mode_item(mode, source) |
192 | 203 |
|
193 | | - # Create items for each mask |
194 | | - for mask in masks: |
| 204 | + # Create items for each mask, sorted naturally by name |
| 205 | + for mask in sorted(masks, |
| 206 | + key=lambda x: self._alphanumeric_sort(x.name)): |
195 | 207 | self.create_mask_item(mode_item, mask) |
| 208 | + |
196 | 209 | self.ui.masks_tree.expandAll() |
197 | 210 | self.ui.masks_tree.resizeColumnToContents(0) |
198 | 211 | self.ui.masks_tree.resizeColumnToContents(1) |
|
0 commit comments