File tree 4 files changed +59
-4
lines changed
4 files changed +59
-4
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,8 @@ New features
8
8
~~~~~~~~~~~~
9
9
- Added ``MPLWidget `` as a widget containing just a Matplotlib canvas
10
10
without any association with a napari viewer.
11
+ - Added text to each widget indicating how many layers need to be selected
12
+ for the widget to plot something.
11
13
12
14
Visual improvements
13
15
~~~~~~~~~~~~~~~~~~~
Original file line number Diff line number Diff line change @@ -138,6 +138,11 @@ class NapariMPLWidget(BaseNapariMPLWidget):
138
138
for creating and working with the Matplotlib figure and any axes.
139
139
"""
140
140
141
+ #: Number of layers taken as input
142
+ n_layers_input = Interval (None , None )
143
+ #: Type of layer taken as input
144
+ input_layer_types : Tuple [napari .layers .Layer , ...] = (napari .layers .Layer ,)
145
+
141
146
def __init__ (
142
147
self ,
143
148
napari_viewer : napari .viewer .Viewer ,
@@ -149,10 +154,12 @@ def __init__(
149
154
self ._setup_callbacks ()
150
155
self .layers : List [napari .layers .Layer ] = []
151
156
152
- #: Number of layers taken as input
153
- n_layers_input = Interval (None , None )
154
- #: Type of layer taken as input
155
- input_layer_types : Tuple [napari .layers .Layer , ...] = (napari .layers .Layer ,)
157
+ helper_text = self .n_layers_input ._helper_text
158
+ if helper_text is not None :
159
+ if self .name is None :
160
+ self .layout ().insertWidget (0 , QLabel (helper_text ))
161
+ else :
162
+ self .layout ().insertWidget (1 , QLabel (helper_text ))
156
163
157
164
@property
158
165
def n_selected_layers (self ) -> int :
Original file line number Diff line number Diff line change @@ -16,6 +16,23 @@ def test_interval():
16
16
"string" in interval # type: ignore
17
17
18
18
19
+ @pytest .mark .parametrize (
20
+ "lower, upper, text" ,
21
+ [
22
+ (None , None , None ),
23
+ (1 , None , "Select at least 1 layer to generate plot" ),
24
+ (4 , None , "Select at least 4 layers to generate plot" ),
25
+ (None , 1 , "Select at most 1 layer to generate plot" ),
26
+ (None , 5939 , "Select at most 5939 layers to generate plot" ),
27
+ (1 , 1 , "Select 1 layer to generate plot" ),
28
+ (2 , 2 , "Select 2 layers to generate plot" ),
29
+ (1 , 2 , "Select between 1 and 2 layers to generate plot" ),
30
+ ],
31
+ )
32
+ def test_interval_helper_text (lower , upper , text ):
33
+ assert Interval (lower , upper )._helper_text == text
34
+
35
+
19
36
def test_get_size_from_css (mocker ):
20
37
"""Test getting the max-width and max-height from something in css"""
21
38
test_css = """
Original file line number Diff line number Diff line change @@ -46,6 +46,35 @@ def __contains__(self, val: int) -> bool:
46
46
return False
47
47
return True
48
48
49
+ @property
50
+ def _helper_text (self ) -> Optional [str ]:
51
+ """
52
+ Helper text for widgets.
53
+ """
54
+ if self .lower is None and self .upper is None :
55
+ helper_text = None
56
+ elif self .lower is not None and self .upper is None :
57
+ helper_text = (
58
+ f"Select at least { self .lower } layers to generate plot"
59
+ )
60
+ elif self .lower is None and self .upper is not None :
61
+ helper_text = (
62
+ f"Select at most { self .upper } layers to generate plot"
63
+ )
64
+ elif self .lower == self .upper :
65
+ helper_text = f"Select { self .lower } layers to generate plot"
66
+
67
+ else :
68
+ helper_text = (
69
+ f"Select between { self .lower } and "
70
+ f"{ self .upper } layers to generate plot"
71
+ )
72
+
73
+ if helper_text is not None :
74
+ helper_text = helper_text .replace ("1 layers" , "1 layer" )
75
+
76
+ return helper_text
77
+
49
78
50
79
def _has_id (nodes : List [tinycss2 .ast .Node ], id_name : str ) -> bool :
51
80
"""
You can’t perform that action at this time.
0 commit comments