|
| 1 | +from functools import partial |
1 | 2 | from typing import Callable, Optional
|
2 | 3 |
|
3 | 4 | from app_model import Application
|
@@ -67,6 +68,27 @@ def zoom_in(viewer: Viewer) -> None:
|
67 | 68 | viewer.camera.zoom /= 0.95
|
68 | 69 |
|
69 | 70 |
|
| 71 | +def _replace_value_at(seq, pos, new_val): |
| 72 | + tmp_seq = list(seq) |
| 73 | + tmp_seq[pos] = new_val |
| 74 | + return tuple(tmp_seq) |
| 75 | + |
| 76 | + |
| 77 | +def increment_axis(viewer: Viewer, slider_num=None, inc=1) -> None: |
| 78 | + not_disp = viewer.dims.not_displayed |
| 79 | + if slider_num is None: |
| 80 | + axis = viewer.dims.last_used |
| 81 | + elif slider_num < len(not_disp): |
| 82 | + axis = not_disp[slider_num] |
| 83 | + else: |
| 84 | + return |
| 85 | + cur = viewer.dims.current_step |
| 86 | + next_value = viewer.dims.current_step[axis] + inc |
| 87 | + # note: current_step automatically clamps to the correct range, so we |
| 88 | + # don't need to do bounds checks below. |
| 89 | + viewer.dims.current_step = _replace_value_at(cur, axis, next_value) |
| 90 | + |
| 91 | + |
70 | 92 | def increase_dimensions_left(viewer: Viewer) -> None:
|
71 | 93 | viewer.dims._increment_dims_left()
|
72 | 94 |
|
@@ -175,12 +197,12 @@ def increase_gamma(ll: LayerList) -> None:
|
175 | 197 | Action(
|
176 | 198 | id="napari:viewer:increase_dimensions_left",
|
177 | 199 | title="Increase dimensions to the left",
|
178 |
| - callback=increase_dimensions_left, |
| 200 | + callback=partial(increment_axis, slider_num=None, inc=-1), |
179 | 201 | ),
|
180 | 202 | Action(
|
181 | 203 | id="napari:viewer:increase_dimensions_right",
|
182 | 204 | title="Increase dimensions to the right",
|
183 |
| - callback=increase_dimensions_right, |
| 205 | + callback=partial(increment_axis, slider_num=None, inc=1), |
184 | 206 | ),
|
185 | 207 | Action(
|
186 | 208 | id="napari:layer:decrease_contour",
|
|
0 commit comments