import astropy.units as u
from glue.core.message import Message
__all__ = ['NewViewerMessage', 'ViewerAddedMessage', 'ViewerRemovedMessage', 'LoadDataMessage',
'AddDataMessage', 'SnackbarMessage', 'RemoveDataMessage',
'AddLineListMessage', 'RowLockMessage',
'SliceSelectSliceMessage', 'SliceValueUpdatedMessage',
'SliceToolStateMessage',
'TableClickMessage', 'LinkUpdatedMessage', 'ExitBatchLoadMessage',
'AstrowidgetMarkersChangedMessage', 'MarkersPluginUpdate',
'CanvasRotationChangedMessage',
'GlobalDisplayUnitChanged', 'ChangeRefDataMessage',
'PluginTableAddedMessage', 'PluginTableModifiedMessage',
'PluginPlotAddedMessage', 'PluginPlotModifiedMessage']
[docs]
class NewViewerMessage(Message):
"""Message to trigger viewer creation in the application."""
def __init__(self, cls, data, x_attr=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self._cls = cls
self._data = data
self._x_attr = x_attr
@property
def cls(self):
return self._cls
@property
def data(self):
return self._data
@property
def x_attr(self):
return self._x_attr
[docs]
class ViewerAddedMessage(Message):
"""Unlike `NewViewerMessage`, this should be emitted after a viewer is created."""
def __init__(self, viewer_id, *args, **kwargs):
super().__init__(*args, **kwargs)
# NOT viewer reference, which is not unique and can be None
self._viewer_id = viewer_id
@property
def viewer_id(self):
return self._viewer_id
[docs]
class ViewerRemovedMessage(Message):
"""Message emitted after a viewer is destroyed by the application."""
def __init__(self, viewer_id, *args, **kwargs):
super().__init__(*args, **kwargs)
# NOT viewer reference, which is not unique and can be None
self._viewer_id = viewer_id
@property
def viewer_id(self):
return self._viewer_id
class ViewerRenamedMessage(Message):
"""Message emitted after a viewer is destroyed by the application."""
def __init__(self, old_viewer_ref, new_viewer_ref, *args, **kwargs):
super().__init__(*args, **kwargs)
self._old_viewer_ref = old_viewer_ref
self._new_viewer_ref = new_viewer_ref
@property
def old_viewer_ref(self):
return self._old_viewer_ref
@property
def new_viewer_ref(self):
return self._new_viewer_ref
[docs]
class LoadDataMessage(Message):
def __init__(self, path, *args, **kwargs):
super().__init__(*args, **kwargs)
self._path = path
@property
def path(self):
return self._path
[docs]
class AddDataMessage(Message):
def __init__(self, data, viewer, viewer_id=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self._data = data
self._viewer = viewer
self._viewer_id = viewer_id
@property
def data(self):
return self._data
@property
def viewer(self):
return self._viewer
@property
def viewer_id(self):
return self._viewer_id
[docs]
class RemoveDataMessage(Message):
def __init__(self, data, viewer, viewer_id=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self._data = data
self._viewer = viewer
self._viewer_id = viewer_id
@property
def data(self):
return self._data
@property
def viewer(self):
return self._viewer
@property
def viewer_id(self):
return self._viewer_id
[docs]
class ChangeRefDataMessage(Message):
def __init__(self, data, viewer, viewer_id=None, old=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self._data = data
self._viewer = viewer
self._viewer_id = viewer_id
self._old = old
@property
def data(self):
return self._data
@property
def viewer(self):
return self._viewer
@property
def viewer_id(self):
return self._viewer_id
@property
def old(self):
return self._old
[docs]
class SnackbarMessage(Message):
def __init__(self, text, color=None, timeout=5000, loading=False,
*args, **kwargs):
super().__init__(*args, **kwargs)
self._text = text
self._color = color
self._timeout = timeout
self._loading = loading
@property
def text(self):
return self._text
@property
def color(self):
return self._color
@property
def timeout(self):
return self._timeout
@property
def loading(self):
return self._loading
class ConfigurationLoadedMessage(Message):
def __init__(self, config, *args, **kwargs):
super().__init__(*args, **kwargs)
self._config = config
@property
def config(self):
return self._config
class AddDataToViewerMessage(Message):
def __init__(self, viewer_reference, data_label, *args, **kwargs):
super().__init__(*args, **kwargs)
self._viewer_reference = viewer_reference
self._data_label = data_label
@property
def viewer_reference(self):
return self._viewer_reference
@property
def data_label(self):
return self._data_label
class RemoveDataFromViewerMessage(Message):
def __init__(self, viewer_reference, data_label, *args, **kwargs):
super().__init__(*args, **kwargs)
self._viewer_reference = viewer_reference
self._data_label = data_label
@property
def viewer_reference(self):
return self._viewer_reference
@property
def data_label(self):
return self._data_label
[docs]
class AddLineListMessage(Message):
def __init__(self, table, *args, **kwargs):
super().__init__(*args, **kwargs)
self._table = table
@property
def table(self):
return self._table
class LineIdentifyMessage(Message):
def __init__(self, name_rest, *args, **kwargs):
super().__init__(*args, **kwargs)
self._name_rest = name_rest
@property
def name_rest(self):
return self._name_rest
class SpectralMarksChangedMessage(Message):
def __init__(self, marks, *args, **kwargs):
super().__init__(*args, **kwargs)
self._marks = marks
@property
def names_rest(self):
return [m.name_rest for m in self.marks]
@property
def marks(self):
return self._marks
class RedshiftMessage(Message):
'''Messages related to Specviz redshift slider'''
def __init__(self, param, value, *args, **kwargs):
super().__init__(*args, **kwargs)
self._param = param
self._value = value
@property
def param(self):
return self._param
@property
def value(self):
return self._value
[docs]
class RowLockMessage(Message):
def __init__(self, is_locked, *args, **kwargs):
super().__init__(*args, **kwargs)
self._is_locked = is_locked
@property
def is_locked(self):
return self._is_locked
[docs]
class TableClickMessage(Message):
'''Message generated by Mosviz table to zoom to object on image'''
def __init__(self, selected_index, shared_image=False, *args, **kwargs):
super().__init__(*args, **kwargs)
self._selected_index = selected_index
self._shared_image = shared_image
@property
def selected_index(self):
return self._selected_index
@property
def shared_image(self):
return self._shared_image
[docs]
class SliceSelectSliceMessage(Message):
'''Message generated by the cubeviz helper and processed by the slice plugin to sync
slice selection across all viewers'''
def __init__(self, value, *args, **kwargs):
super().__init__(*args, **kwargs)
self._value = value
@property
def value(self):
return self._value
[docs]
class SliceValueUpdatedMessage(Message):
'''Message generated by the slice plugin when the selected slice is updated'''
def __init__(self, value, value_unit, *args, **kwargs):
super().__init__(*args, **kwargs)
self.value = value
self.value_unit = value_unit
[docs]
class LinkUpdatedMessage(Message):
'''Message generated when the WCS/pixel linking is changed'''
def __init__(self, link_type, wcs_use_fallback, wcs_use_affine, *args, **kwargs):
super().__init__(*args, **kwargs)
self._link_type = link_type
self._wcs_use_fallback = wcs_use_fallback
self._wcs_use_affine = wcs_use_affine
@property
def link_type(self):
return self._link_type
@property
def wcs_use_fallback(self):
return self._wcs_use_fallback
@property
def wcs_use_affine(self):
return self._wcs_use_affine
[docs]
class ExitBatchLoadMessage(Message):
'''Message generated when exiting the outermost batch_load context manager'''
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
[docs]
class MarkersPluginUpdate(Message):
'''Message when the length of the markers plugin table changes'''
def __init__(self, table_length, *args, **kwargs):
super().__init__(*args, **kwargs)
self.table_length = table_length
[docs]
class CanvasRotationChangedMessage(Message):
'''Message generated by canvas rotation plugin'''
def __init__(self, viewer_id, angle, flip_horizontal, *args, **kwargs):
super().__init__(*args, **kwargs)
self._viewer_id = viewer_id
self._angle = angle
self._flip_horizontal = flip_horizontal
@property
def viewer_id(self):
return self._viewer_id
@property
def angle(self):
return self._angle
@property
def flip_horizontal(self):
return self._flip_horizontal
[docs]
class GlobalDisplayUnitChanged(Message):
'''Message generated when the global app-wide display unit is changed'''
def __init__(self, axis, unit, *args, **kwargs):
super().__init__(*args, **kwargs)
self._axis = axis
self._unit = unit
@property
def axis(self):
return self._axis
@property
def unit(self):
return u.Unit(self._unit)
[docs]
class PluginTableAddedMessage(Message):
'''Message generated when a plugin table is initialized'''
def __init__(self, sender):
super().__init__(sender)
@property
def table(self):
return self.sender
@property
def plugin(self):
return self.sender._plugin
[docs]
class PluginTableModifiedMessage(PluginTableAddedMessage):
'''Message generated when the items in a plugin table are changed'''
def __init__(self, sender):
super().__init__(sender)
[docs]
class PluginPlotAddedMessage(Message):
'''Message generated when a plugin plot is initialized'''
def __init__(self, sender):
super().__init__(sender)
@property
def plot(self):
return self.sender
@property
def plugin(self):
return self.sender._plugin
[docs]
class PluginPlotModifiedMessage(PluginPlotAddedMessage):
'''Message generated when the items in a plugin plot are changed'''
def __init__(self, sender):
super().__init__(sender)