Skip to content

Commit 1646e87

Browse files
committed
fix: keep wizard candidate color stable
1 parent 7723aff commit 1646e87

4 files changed

Lines changed: 37 additions & 7 deletions

File tree

phy/cluster/supervisor.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,8 @@ def _clusters_selected(self, sender, obj, **kwargs):
11181118
return
11191119
cluster_ids = obj['selected']
11201120
next_cluster = obj['next']
1121-
kwargs = obj.get('kwargs', {})
1121+
kwargs = dict(obj.get('kwargs', {}))
1122+
kwargs.pop('_selection_intent', None)
11221123
logger.debug('Clusters selected: %s (%s)', cluster_ids, next_cluster)
11231124
change = self.selection.set_normal_selection(cluster_ids)
11241125
change = self._set_table_presentation_order(change)
@@ -1147,12 +1148,16 @@ def _similar_selected(self, sender, obj):
11471148
return
11481149
similar = obj['selected']
11491150
next_similar = obj['next']
1150-
kwargs = obj.get('kwargs', {})
1151+
kwargs = dict(obj.get('kwargs', {}))
1152+
selection_intent = kwargs.pop('_selection_intent', None)
11511153
logger.debug('Similar clusters selected: %s (%s)', similar, next_similar)
11521154
presentation_order = self._presentation_order_from_tables(
11531155
self.selection.state, similar_ids=similar
11541156
)
1155-
self.selection.set_similarity_selection(similar, presentation_order)
1157+
if selection_intent == 'navigation' and not self.selection.state.is_merge_mode:
1158+
self.selection.navigate_similarity_selection(similar, presentation_order)
1159+
else:
1160+
self.selection.set_similarity_selection(similar, presentation_order)
11561161
self._update_selection_colors()
11571162
self._project_merge_view()
11581163
self.task_logger.log(self.similarity_view, 'select', similar, output=obj)

phy/cluster/tests/test_supervisor.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,14 @@ def test_merge_mode_next_navigates_similarity_not_cluster(supervisor):
610610
assert supervisor.selection.state.merge is before.merge
611611
assert supervisor.selected_clusters == []
612612
assert len(supervisor.selected_similar) == 1
613+
first_candidate = supervisor.selected_similar[0]
614+
first_colors = supervisor.selection_color_order
615+
616+
supervisor.next()
617+
supervisor.block()
618+
619+
assert supervisor.selection_color_order[: len(first_colors)] == first_colors
620+
assert supervisor.selected_similar != [first_candidate]
613621

614622

615623
def test_merge_mode_merge_undo_redo_restores_workspace(supervisor):
@@ -1735,19 +1743,26 @@ def test_supervisor_reset(qtbot, supervisor):
17351743
supervisor.select_actions.next()
17361744
supervisor.block()
17371745
_assert_selected(supervisor, [30, 20])
1746+
assert supervisor.similarity_view._selected_color_index(20) == 1
17381747

17391748
supervisor.select_actions.next()
17401749
supervisor.block()
17411750
_assert_selected(supervisor, [30, 11])
1751+
assert supervisor.similarity_view._selected_color_index(11) == 1
17421752

17431753
supervisor.select_actions.previous()
17441754
supervisor.block()
17451755
_assert_selected(supervisor, [30, 20])
1756+
assert supervisor.similarity_view._selected_color_index(20) == 1
17461757

17471758
supervisor.select_actions.unselect_similar()
17481759
supervisor.block()
17491760
_assert_selected(supervisor, [30])
17501761

1762+
supervisor.select_actions.next()
1763+
supervisor.block()
1764+
assert supervisor.similarity_view._selected_color_index(supervisor.selected_similar[0]) == 1
1765+
17511766

17521767
def test_supervisor_nav(qtbot, supervisor):
17531768
supervisor.select_actions.reset_wizard()

phy/gui/tests/test_widgets.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,13 +494,23 @@ def test_table_nav_last(qtbot, table):
494494

495495

496496
def test_table_nav_0(qtbot, table):
497+
payloads = []
498+
499+
@connect(event='select', sender=table)
500+
def on_select(sender, obj):
501+
payloads.append(obj)
502+
497503
table.select([4])
504+
assert payloads[-1]['kwargs'] == {}
498505

499506
table.next()
500507
_assert(table.get_selected, [6])
508+
assert payloads[-1]['kwargs'] == {'_selection_intent': 'navigation'}
501509

502510
table.previous()
503511
_assert(table.get_selected, [4])
512+
assert payloads[-1]['kwargs'] == {'_selection_intent': 'navigation'}
513+
unconnect(on_select)
504514

505515

506516
def test_table_navigation_skip_masked_policy(qtbot, table):

phy/gui/widgets.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,18 +1315,18 @@ def get_sibling_id(self, row_id=None, direction='next'):
13151315

13161316
def _move_to_sibling(self, row_id=None, direction='next'):
13171317
if not self.get_selected_ids():
1318-
return self._select_first_or_last('first')
1318+
return self._select_first_or_last('first', _selection_intent='navigation')
13191319
new_id = self.get_sibling_id(row_id, direction)
13201320
if new_id is None:
13211321
return None
1322-
return self.select([new_id])
1322+
return self.select([new_id], _selection_intent='navigation')
13231323

1324-
def _select_first_or_last(self, which):
1324+
def _select_first_or_last(self, which, **kwargs):
13251325
visible = self._visible_ids()
13261326
ordered = visible if which == 'first' else list(reversed(visible))
13271327
for row_id in ordered:
13281328
if self._is_navigable_id(row_id):
1329-
return self.select([row_id])
1329+
return self.select([row_id], **kwargs)
13301330
return None
13311331

13321332
def sort_by(self, name, sort_dir='asc'):

0 commit comments

Comments
 (0)