Skip to content

Commit 70e9a78

Browse files
committed
adding overlay traitletto list current overlays, must be updated using get_overlay to keep up to date
1 parent 882795c commit 70e9a78

3 files changed

Lines changed: 53 additions & 4 deletions

File tree

js/models/event_handler.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ export default class EventHandler {
281281
add_MOC_from_dict: this.messageHandler.handleAddMOCFromDict,
282282
add_overlay: this.messageHandler.handleAddOverlay,
283283
remove_overlay: this.messageHandler.handleRemoveOverlay,
284+
get_overlays: this.messageHandler.handleGetOverlays,
284285
change_colormap: this.messageHandler.handleChangeColormap,
285286
get_JPG_thumbnail: this.messageHandler.handleGetJPGThumbnail,
286287
trigger_selection: this.messageHandler.handleTriggerSelection,

js/models/message_handler.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,30 @@ export default class MessageHandler {
140140
}
141141
}
142142

143-
handleRemoveOverlay(msg) {
143+
handleRemoveOverlay = (msg) => {
144144
const overlay_names = msg["name"];
145145
for (const overlay_name of overlay_names) {
146146
console.info(`Sending removeOverlay for ${overlay_name}`);
147147
this.aladin.removeOverlay(overlay_name);
148148
}
149-
}
149+
this.handleGetOverlays();
150+
};
151+
152+
handleGetOverlays = () => {
153+
const overlay_names = [];
154+
const overlays = this.aladin.getOverlays();
155+
for (const overlay of overlays) {
156+
const overlay_name = overlay["name"];
157+
overlay_names.push(overlay_name);
158+
}
159+
console.info(`Current overlays are ${overlay_names}`);
160+
this.model.send({
161+
event_type: "current_overlays",
162+
content: {
163+
overlays: overlay_names,
164+
},
165+
});
166+
};
150167

151168
handleChangeColormap(msg) {
152169
this.aladin.getBaseImageLayer().setColormap(msg["colormap"]);

src/ipyaladin/widget.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ class Aladin(anywidget.AnyWidget):
177177
).tag(sync=True)
178178
_wcs = traitlets.Dict().tag(sync=True)
179179
_fov_xy = traitlets.Dict().tag(sync=True)
180+
# Overlays
181+
_overlays = traitlets.List(
182+
[],
183+
help="A list of overlays on the widget.",
184+
).tag(sync=True)
180185

181186
# content of the last click
182187
clicked_object = traitlets.Dict().tag(sync=True)
@@ -254,6 +259,9 @@ def _handle_custom_message(self, _: any, message: dict, buffers: any) -> None:
254259
self.listener_callback["select"](message["content"])
255260
elif event_type == "save_view_as_image":
256261
self._save_file(message["path"], buffers[0])
262+
elif event_type == "current_overlays":
263+
self.listener_callback["current_overlays"](message["content"])
264+
self._overlays = message["content"]["overlays"]
257265

258266
@property
259267
def selected_objects(self) -> List[Table]:
@@ -271,6 +279,18 @@ def selected_objects(self) -> List[Table]:
271279
catalogs.append(Table(objects_data))
272280
return catalogs
273281

282+
@property
283+
def overlays(self) -> List:
284+
"""The list of overlays on the widget.
285+
286+
Returns
287+
-------
288+
list
289+
A list of strings representing the widget overlays.
290+
291+
"""
292+
return self._overlays
293+
274294
@property
275295
def height(self) -> int:
276296
"""The height of the widget.
@@ -957,12 +977,12 @@ def add_graphic_overlay_from_stcs(
957977

958978
@widget_should_be_loaded
959979
def remove_overlay(self, overlay_name: Union[Iterable[str], str]) -> None:
960-
"""Remove an overlay layer defined by an STC-S string.
980+
"""Remove an overlay layer defined by a string.
961981
962982
Parameters
963983
----------
964984
overlay_name : str, Iterable[str]
965-
The STC-S string //or an iterable of STC-S strings.
985+
The string or an iterable of strings.
966986
967987
"""
968988
overlay_name = [overlay_name] if isinstance(overlay_name, str) else overlay_name
@@ -974,6 +994,15 @@ def remove_overlay(self, overlay_name: Union[Iterable[str], str]) -> None:
974994
}
975995
)
976996

997+
@widget_should_be_loaded
998+
def get_overlays(self) -> List:
999+
"""Update the current overlays defined by their names."""
1000+
self.send(
1001+
{
1002+
"event_name": "get_overlays",
1003+
}
1004+
)
1005+
9771006
@widget_should_be_loaded
9781007
def set_color_map(self, color_map_name: str) -> None:
9791008
"""Change the color map of the Aladin Lite widget.
@@ -1039,6 +1068,8 @@ def set_listener(self, listener_type: str, callback: Callable) -> None:
10391068
self.listener_callback["click"] = callback
10401069
elif listener_type == "select":
10411070
self.listener_callback["select"] = callback
1071+
elif listener_type == "current_overlays":
1072+
self.listener_callback["current_overlays"] = callback
10421073
else:
10431074
raise ValueError(
10441075
"listener_type must be 'object_hovered', "

0 commit comments

Comments
 (0)