diff --git a/CHANGES.rst b/CHANGES.rst index 9ffa710598..430589b058 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -67,6 +67,9 @@ Other Changes and Additions 3.9.1 (unreleased) ================== +- Fix mouseover display's top-layer logic to account for the visibility and contour toggles in + the plot options plugin. [#2818] + Bug Fixes --------- diff --git a/jdaviz/configs/cubeviz/helper.py b/jdaviz/configs/cubeviz/helper.py index d0f5f2c89e..1b6df6f293 100644 --- a/jdaviz/configs/cubeviz/helper.py +++ b/jdaviz/configs/cubeviz/helper.py @@ -2,7 +2,6 @@ from astropy.io import fits from astropy.io import registry as io_registry from astropy.utils.decorators import deprecated -from glue.core import BaseData from specutils import Spectrum1D from specutils.io.registers import _astropy_has_priorities @@ -181,10 +180,6 @@ def get_aperture_photometry_results(self): return self.plugins['Aperture Photometry']._obj.export_table() -def layer_is_cube_image_data(layer): - return isinstance(layer, BaseData) and layer.ndim in (2, 3) - - # TODO: We can remove this when specutils supports it, i.e., # https://github.com/astropy/specutils/issues/592 and # https://github.com/astropy/specutils/pull/1009 diff --git a/jdaviz/configs/cubeviz/plugins/viewers.py b/jdaviz/configs/cubeviz/plugins/viewers.py index 20fa227e6d..8d1316af80 100644 --- a/jdaviz/configs/cubeviz/plugins/viewers.py +++ b/jdaviz/configs/cubeviz/plugins/viewers.py @@ -9,7 +9,6 @@ from jdaviz.core.registries import viewer_registry from jdaviz.core.marks import SliceIndicatorMarks, ShadowSpatialSpectral -from jdaviz.configs.cubeviz.helper import layer_is_cube_image_data from jdaviz.configs.default.plugins.viewers import JdavizViewerMixin from jdaviz.configs.specviz.plugins.viewers import SpecvizProfileView from jdaviz.core.events import AddDataMessage, RemoveDataMessage, GlobalDisplayUnitChanged @@ -209,18 +208,6 @@ def _default_flux_viewer_reference_name(self): def _default_uncert_viewer_reference_name(self): return self.jdaviz_helper._default_uncert_viewer_reference_name - @property - def active_image_layer(self): - """Active image layer in the viewer, if available.""" - # Find visible layers - visible_layers = [layer for layer in self.state.layers - if (layer.visible and layer_is_cube_image_data(layer.layer))] - - if len(visible_layers) == 0: - return None - - return visible_layers[-1] - def _on_global_display_unit_changed(self, msg): # Clear cache of slice values when units change if 'slice_values' in self.__dict__: diff --git a/jdaviz/configs/default/plugins/viewers.py b/jdaviz/configs/default/plugins/viewers.py index b1ee5a0535..67b7264796 100644 --- a/jdaviz/configs/default/plugins/viewers.py +++ b/jdaviz/configs/default/plugins/viewers.py @@ -316,7 +316,8 @@ def active_image_layer(self): visible_layers = [layer for layer in self.state.layers if (layer.visible and layer_is_image_data(layer.layer) and - layer_is_not_dq(layer.layer))] + layer_is_not_dq(layer.layer) and + (layer.bitmap_visible or layer.contour_visible))] if len(visible_layers) == 0: return None diff --git a/jdaviz/configs/imviz/helper.py b/jdaviz/configs/imviz/helper.py index 11e04c6161..f2d5310a6e 100644 --- a/jdaviz/configs/imviz/helper.py +++ b/jdaviz/configs/imviz/helper.py @@ -398,8 +398,12 @@ def layer_is_2d(layer): return isinstance(layer, BaseData) and layer.ndim == 2 +def layer_is_2d_or_3d(layer): + return isinstance(layer, BaseData) and layer.ndim in (2, 3) + + def layer_is_image_data(layer): - return layer_is_2d(layer) and not layer.meta.get(_wcs_only_label, False) + return layer_is_2d_or_3d(layer) and not layer.meta.get(_wcs_only_label, False) def layer_is_wcs_only(layer):