Skip to content

Commit 2ff31cc

Browse files
committed
feat: enhance result label creation with customizable position and offset options
1 parent b0ed95d commit 2ff31cc

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

datalab/adapters_plotpy/objects/scalar.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,17 +483,39 @@ def item_json(self, value: str | None) -> None:
483483
def create_merged_label(self) -> LabelItem | None:
484484
"""Create a single merged label from all result adapters.
485485
486+
The label position can be customized per object via metadata options:
487+
488+
- ``result_label_position`` (str, default ``"TL"``): one of PlotPy's
489+
relative positions (``"TL"``, ``"T"``, ``"TR"``, ``"L"``, ``"R"``,
490+
``"BL"``, ``"B"``, ``"BR"``). Used both as the canvas anchor and as
491+
the label-relative anchor (the same corner of the label is pinned
492+
to the same corner of the plot).
493+
- ``result_label_offset`` (tuple ``(dx, dy)`` or list, default
494+
``(0, 0)``): pixel offset of the label relative to the anchor.
495+
486496
Returns:
487497
Merged label item, or None if no results
488498
"""
489499
if not self.result_adapters:
490500
return None
491501

502+
# Per-object label placement (set via ``obj.set_metadata_option(...)``)
503+
position = self.obj.get_metadata_option("result_label_position", "TL")
504+
offset = self.obj.get_metadata_option("result_label_offset", (0, 0))
505+
offset = (int(offset[0]), int(offset[1]))
506+
492507
# Create the label with merged content
493508
merged_html = resultadapter_to_html(self.result_adapters, self.obj)
494-
item = make.label(merged_html, "TL", (0, 0), "TL", title="Results")
509+
item = make.label(merged_html, position, offset, position, title="Results")
495510
font = get_font(PLOTPY_CONF, "results", "label/font")
496511
item.set_style("results", "label")
512+
# ``set_style`` above re-reads the ``results/label`` config section into
513+
# ``labelparam`` and clobbers anchor/abspos/xc/yc set by ``make.label``.
514+
# Re-apply the requested placement so per-object metadata wins.
515+
item.labelparam.abspos = True
516+
item.labelparam.absg = position
517+
item.labelparam.anchor = position
518+
item.labelparam.xc, item.labelparam.yc = offset
497519
item.labelparam.font.update_param(font)
498520
item.labelparam.update_item(item)
499521

0 commit comments

Comments
 (0)