Skip to content

Commit 38bd1a3

Browse files
committed
silx.gui.data.DataViewer: split composite ImageView into Plot2dView and ComplexImageView
1 parent 731158f commit 38bd1a3

File tree

3 files changed

+46
-32
lines changed

3 files changed

+46
-32
lines changed

src/silx/gui/data/DataViewer.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from silx.gui.data import DataViews
3333
from silx.gui.data.DataViews import (
3434
NXDATA_STACK_MODE,
35+
PLOT2D_MODE,
3536
STACK_MODE,
3637
IMAGE_MODE,
3738
_normalizeData,
@@ -166,7 +167,8 @@ def createDefaultViews(self, parent=None):
166167
DataViews._Hdf5View,
167168
DataViews._NXdataView,
168169
DataViews._Plot1dView,
169-
DataViews._ImageView,
170+
DataViews._Plot2dView,
171+
DataViews._ComplexImageView,
170172
DataViews._Plot3dView,
171173
DataViews._RawView,
172174
DataViews._Plot2dRecordView,
@@ -358,7 +360,16 @@ def getViewFromModeId(self, modeId):
358360
deprecated_warning(
359361
"Argument",
360362
"DataViews.STACK_MODE",
361-
replacement="DataViews.IMAGE_MODE",
363+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
364+
since_version="3.0.0",
365+
)
366+
return None
367+
368+
if modeId == IMAGE_MODE:
369+
deprecated_warning(
370+
"Argument",
371+
"DataViews.IMAGE_MODE",
372+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
362373
since_version="3.0.0",
363374
)
364375
return None
@@ -377,21 +388,31 @@ def setDisplayMode(self, modeId: int):
377388
378389
- `DataViews.EMPTY_MODE`: display nothing
379390
- `DataViews.PLOT1D_MODE`: display the data as a curve
380-
- `DataViews.IMAGE_MODE`: display the data as an image
391+
- `DataViews.PLOT2D_MODE`: display real data as an image
392+
- `DataViews.COMPLEX_IMAGE_MODE`: display complex data as an image
381393
- `DataViews.PLOT3D_MODE`: display the data as an isosurface
382394
- `DataViews.RAW_MODE`: display the data as a table
383-
- `DataViews.STACK_MODE`: deprecated. Use `DataViews.IMAGE_MODE` instead.
395+
- `DataViews.STACK_MODE`: deprecated. Use `DataViews.PLOT2D_MODE` or `DataViews.COMPLEX_IMAGE_MODE` instead.
384396
- `DataViews.HDF5_MODE`: display the data as a table of HDF5 info
385397
- `DataViews.NXDATA_MODE`: display the data as NXdata
386398
"""
387399
if modeId == STACK_MODE:
388400
deprecated_warning(
389401
"Argument",
390402
"DataViews.STACK_MODE",
391-
replacement="DataViews.IMAGE_MODE",
403+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
392404
since_version="3.0.0",
393405
)
394-
modeId = IMAGE_MODE
406+
modeId = PLOT2D_MODE
407+
408+
if modeId == IMAGE_MODE:
409+
deprecated_warning(
410+
"Argument",
411+
"DataViews.IMAGE_MODE",
412+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
413+
since_version="3.0.0",
414+
)
415+
modeId = PLOT2D_MODE
395416

396417
try:
397418
view = self.getViewFromModeId(modeId)
@@ -612,7 +633,6 @@ def replaceView(self, modeId: int, newView: DataViews.DataView) -> bool:
612633
613634
- `DataViews.EMPTY_MODE`
614635
- `DataViews.PLOT1D_MODE`
615-
- `DataViews.IMAGE_MODE`
616636
- `DataViews.PLOT2D_MODE`
617637
- `DataViews.COMPLEX_IMAGE_MODE`
618638
- `DataViews.PLOT3D_MODE`
@@ -632,7 +652,16 @@ def replaceView(self, modeId: int, newView: DataViews.DataView) -> bool:
632652
deprecated_warning(
633653
"Argument",
634654
"DataViews.STACK_MODE",
635-
replacement="DataViews.IMAGE_MODE",
655+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
656+
since_version="3.0.0",
657+
)
658+
return False
659+
660+
if modeId == IMAGE_MODE:
661+
deprecated_warning(
662+
"Argument",
663+
"DataViews.IMAGE_MODE",
664+
replacement="DataViews.PLOT2D_MODE for real images, DataViews.COMPLEX_IMAGE_MODE for complex images",
636665
since_version="3.0.0",
637666
)
638667
return False

src/silx/gui/data/DataViews.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,8 @@ def getDataPriority(self, data, info):
11251125
return DataView.UNSUPPORTED
11261126
if data is None or not info.isArray or not (info.isNumeric or info.isBoolean):
11271127
return DataView.UNSUPPORTED
1128+
if info.isComplex:
1129+
return DataView.UNSUPPORTED
11281130
if info.dim < 2:
11291131
return DataView.UNSUPPORTED
11301132
if info.interpretation == "image":
@@ -1194,7 +1196,7 @@ def __init__(self, parent):
11941196
super().__init__(
11951197
parent=parent,
11961198
modeId=COMPLEX_IMAGE_MODE,
1197-
label="Complex Image",
1199+
label="Image",
11981200
icon=icons.getQIcon("view-2d"),
11991201
)
12001202

@@ -1464,23 +1466,6 @@ def __init__(self, parent):
14641466
self.addView(_RecordView(parent))
14651467

14661468

1467-
class _ImageView(CompositeDataView):
1468-
"""View displaying data as 2D image
1469-
1470-
It choose between Plot2D and ComplexImageView widgets
1471-
"""
1472-
1473-
def __init__(self, parent):
1474-
super().__init__(
1475-
parent=parent,
1476-
modeId=IMAGE_MODE,
1477-
label="Image",
1478-
icon=icons.getQIcon("view-2d"),
1479-
)
1480-
self.addView(_ComplexImageView(parent))
1481-
self.addView(_Plot2dView(parent))
1482-
1483-
14841469
class _InvalidNXdataView(DataView):
14851470
"""DataView showing a simple label with an error message
14861471
to inform that a group with @NX_class=NXdata cannot be

src/silx/gui/data/test/test_dataviewer.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test_image_data(self):
105105
widget.setData(data)
106106
availableModes = {v.modeId() for v in widget.currentAvailableViews()}
107107
self.assertEqual(DataViews.RAW_MODE, widget.displayMode())
108-
self.assertIn(DataViews.IMAGE_MODE, availableModes)
108+
self.assertIn(DataViews.PLOT2D_MODE, availableModes)
109109

110110
def test_image_bool(self):
111111
data = numpy.zeros((10, 10), dtype=bool)
@@ -114,7 +114,7 @@ def test_image_bool(self):
114114
widget.setData(data)
115115
availableModes = {v.modeId() for v in widget.currentAvailableViews()}
116116
self.assertEqual(DataViews.RAW_MODE, widget.displayMode())
117-
self.assertIn(DataViews.IMAGE_MODE, availableModes)
117+
self.assertIn(DataViews.PLOT2D_MODE, availableModes)
118118

119119
def test_image_complex_data(self):
120120
data = numpy.arange(3**2, dtype=numpy.complex64)
@@ -123,7 +123,7 @@ def test_image_complex_data(self):
123123
widget.setData(data)
124124
availableModes = {v.modeId() for v in widget.currentAvailableViews()}
125125
self.assertEqual(DataViews.RAW_MODE, widget.displayMode())
126-
self.assertIn(DataViews.IMAGE_MODE, availableModes)
126+
self.assertIn(DataViews.COMPLEX_IMAGE_MODE, availableModes)
127127

128128
def test_plot_3d_data(self):
129129
data = numpy.arange(3**3)
@@ -136,7 +136,7 @@ def test_plot_3d_data(self):
136136

137137
self.assertIn(DataViews.PLOT3D_MODE, availableModes)
138138
except ImportError:
139-
self.assertIn(DataViews.IMAGE_MODE, availableModes)
139+
self.assertIn(DataViews.PLOT2D_MODE, availableModes)
140140
self.assertEqual(DataViews.RAW_MODE, widget.displayMode())
141141

142142
def test_array_1d_data(self):
@@ -205,8 +205,8 @@ def test_change_display_mode(self):
205205
assert listener.arguments() == [((0, 0, 0, slice(None)), None)]
206206
listener.clear()
207207

208-
widget.setDisplayMode(DataViews.IMAGE_MODE)
209-
self.assertEqual(widget.displayedView().modeId(), DataViews.IMAGE_MODE)
208+
widget.setDisplayMode(DataViews.PLOT2D_MODE)
209+
self.assertEqual(widget.displayedView().modeId(), DataViews.PLOT2D_MODE)
210210
self.qWait(200)
211211
assert listener.arguments() == [((0, 0, slice(None), slice(None)), None)]
212212
listener.clear()

0 commit comments

Comments
 (0)