Skip to content

Commit 94d65d1

Browse files
Merge pull request #85 from KitwareMedical/fix-layout-manager-registered-layouts-changed
Fix layout manager registered layouts changed
2 parents 4839a03 + 94f48e1 commit 94d65d1

2 files changed

Lines changed: 54 additions & 8 deletions

File tree

tests/test_layout_manager.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,48 @@ def test_on_initialize_refreshes_if_current_layout(
368368
layout_manager.initialize_layout_grid(ui)
369369

370370
a_mock_ui.clear.assert_called_once()
371+
372+
373+
def test_emit_current_layout_changed(
374+
a_mock_ui,
375+
a_mock_view_manager,
376+
a_slicer_scene,
377+
a_server,
378+
a_sagittal_layout,
379+
a_coronal_layout,
380+
):
381+
layout_manager = LayoutManager(
382+
a_slicer_scene, a_mock_view_manager, a_server, virtual_node=a_mock_ui, is_virtual_node_initialized=False
383+
)
384+
on_current_layout_changed = mock.MagicMock()
385+
layout_manager.current_layout_changed.connect(on_current_layout_changed)
386+
layout_manager.register_layout_dict(
387+
{
388+
"Sagittal": a_sagittal_layout,
389+
"Coronal": a_coronal_layout,
390+
}
391+
)
392+
layout_manager.set_layout("Coronal")
393+
on_current_layout_changed.assert_called_once_with("Coronal")
394+
395+
396+
def test_emit_registered_layouts_changed(
397+
a_mock_ui,
398+
a_mock_view_manager,
399+
a_slicer_scene,
400+
a_server,
401+
a_sagittal_layout,
402+
a_coronal_layout,
403+
):
404+
layout_manager = LayoutManager(
405+
a_slicer_scene, a_mock_view_manager, a_server, virtual_node=a_mock_ui, is_virtual_node_initialized=False
406+
)
407+
on_registered_layouts_changed = mock.MagicMock()
408+
layout_manager.registered_layouts_changed.connect(on_registered_layouts_changed)
409+
layout_manager.register_layout_dict(
410+
{
411+
"Sagittal": a_sagittal_layout,
412+
"Coronal": a_coronal_layout,
413+
}
414+
)
415+
on_registered_layouts_changed.assert_called_once()

trame_slicer/core/layout_manager.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@ def register_layout(self, layout_id: str, layout: Layout, lazy_initialization: b
6161
If lazy_initialization is False, the views will not be instantiated unless the passed layout id matches the
6262
current selected layout id.
6363
"""
64-
with self.registered_layouts_changed.emit_once():
65-
self._layouts[layout_id] = layout
66-
if not lazy_initialization:
67-
self.create_layout_views_if_needed(layout_id)
64+
self._layouts[layout_id] = layout
65+
if not lazy_initialization:
66+
self.create_layout_views_if_needed(layout_id)
6867

69-
if self._current_layout == layout_id:
70-
self._refresh_layout()
68+
if self._current_layout == layout_id:
69+
self._refresh_layout()
70+
self.registered_layouts_changed.emit()
7171

7272
def set_layout(self, layout_id: str) -> None:
7373
if layout_id == self._current_layout:
@@ -137,8 +137,9 @@ def register_layout_dict(self, layout_dict: dict[str, Layout], lazy_initializati
137137
:param lazy_initialization: If True, the layout views will not be created until explicitly requested by
138138
set_layout or create_layout_views_if_needed
139139
"""
140-
for layout_id, layout in layout_dict.items():
141-
self.register_layout(layout_id, layout, lazy_initialization)
140+
with self.registered_layouts_changed.emit_once():
141+
for layout_id, layout in layout_dict.items():
142+
self.register_layout(layout_id, layout, lazy_initialization)
142143

143144
@classmethod
144145
def default_grid_configuration(cls) -> dict[str, Layout]:

0 commit comments

Comments
 (0)