@@ -178,6 +178,11 @@ class Aladin(anywidget.AnyWidget):
178178 ).tag (sync = True )
179179 _wcs = traitlets .Dict ().tag (sync = True )
180180 _fov_xy = traitlets .Dict ().tag (sync = True )
181+ # Overlays
182+ _overlays = traitlets .List (
183+ [],
184+ help = "A list of overlays on the widget." ,
185+ ).tag (sync = True )
181186
182187 # content of the last click
183188 clicked_object = traitlets .Dict ().tag (sync = True )
@@ -259,6 +264,9 @@ def _handle_custom_message(self, _: any, message: dict, buffers: any) -> None:
259264 self .listener_callback ["select" ](message ["content" ])
260265 elif event_type == "save_view_as_image" :
261266 self ._save_file (message ["path" ], buffers [0 ])
267+ elif event_type == "current_overlays" :
268+ self ._overlays = message ["content" ]["overlays" ]
269+ self .listener_callback ["current_overlays" ](message ["content" ])
262270
263271 @property
264272 def selected_objects (self ) -> List [Table ]:
@@ -276,6 +284,17 @@ def selected_objects(self) -> List[Table]:
276284 catalogs .append (Table (objects_data ))
277285 return catalogs
278286
287+ @property
288+ def overlays (self ) -> List :
289+ """The list of overlays on the widget.
290+
291+ Returns
292+ -------
293+ list
294+ A list of strings representing the widget overlays.
295+ """
296+ return self ._overlays
297+
279298 @property
280299 def height (self ) -> int :
281300 """The height of the widget.
@@ -992,6 +1011,35 @@ def add_graphic_overlay_from_stcs(
9921011 }
9931012 )
9941013
1014+ @widget_should_be_loaded
1015+ def remove_overlay (self , overlay_name : Union [Iterable [str ], str ]) -> None :
1016+ """Remove an overlay layer defined by a string.
1017+
1018+ Parameters
1019+ ----------
1020+ overlay_name : str, Iterable[str]
1021+ The string or an iterable of strings.
1022+ """
1023+ overlay_names = (
1024+ [overlay_name ] if isinstance (overlay_name , str ) else overlay_name
1025+ )
1026+
1027+ self .send (
1028+ {
1029+ "event_name" : "remove_overlay" ,
1030+ "overlay_names" : overlay_names ,
1031+ }
1032+ )
1033+
1034+ @widget_should_be_loaded
1035+ def get_overlays (self ) -> List :
1036+ """Update the current overlays defined by their names."""
1037+ self .send (
1038+ {
1039+ "event_name" : "get_overlays" ,
1040+ }
1041+ )
1042+
9951043 @widget_should_be_loaded
9961044 def set_color_map (self , color_map_name : str ) -> None :
9971045 """Change the color map of the Aladin Lite widget.
@@ -1043,7 +1091,8 @@ def set_listener(self, listener_type: str, callback: Callable) -> None:
10431091 Parameters
10441092 ----------
10451093 listener_type : str
1046- Can either be 'object_hovered', 'object_clicked', 'click' or 'select'
1094+ Can either be 'object_hovered', 'object_clicked', 'click', 'select',
1095+ or 'current_overlays'
10471096 callback : Callable
10481097 A python function to be called when the event corresponding to the
10491098 listener_type is detected
@@ -1057,10 +1106,13 @@ def set_listener(self, listener_type: str, callback: Callable) -> None:
10571106 self .listener_callback ["click" ] = callback
10581107 elif listener_type == "select" :
10591108 self .listener_callback ["select" ] = callback
1109+ elif listener_type == "current_overlays" :
1110+ self .listener_callback ["current_overlays" ] = callback
10601111 else :
10611112 raise ValueError (
10621113 "listener_type must be 'object_hovered', "
1063- "'object_clicked', 'click' or 'select'"
1114+ "'object_clicked', 'click', 'select', "
1115+ "or 'current_overlays'"
10641116 )
10651117
10661118 @widget_should_be_loaded
0 commit comments