Let Texte/Titre elements bind directly to a single row of another object

Adds a "Donnée liée" settings group to Texte/Titre: pick an object, optionally match it to the current game state via 1-2 filter conditions (same engine as the data-repeater's filter, including {{Objet.champ}} cross-references), and use {{champ}} in the text content to show a field from that one matching row. Unlike the data repeater — built for showing a list of rows — this covers displaying a single computed value (e.g. the objective of the level matching the game's current parcours/level) without wrapping it in a repeater.
This commit is contained in:
william
2026-08-24 11:02:54 +02:00
parent f58fb2bc3d
commit 0e5db97180
5 changed files with 74 additions and 3 deletions
@@ -0,0 +1,26 @@
from ..controls.c_text import c_text
from ..controls.c_select import c_select
from ...flow.constants import CONDITION_OPERATORS
# Permet à un Texte/Titre d'afficher directement la valeur d'un champ d'un
# AUTRE objet de données, sans avoir besoin de le poser dans un Répéteur —
# utile pour une valeur unique calculée (ex: l'objectif du niveau en cours)
# plutôt qu'une liste. La ligne affichée est celle qui correspond aux 1 ou 2
# filtres réglés ci-dessous (mêmes réglages, même moteur que ceux du
# Répéteur de données — voir filter_repeater_rows.py) ; sans filtre, c'est la
# ligne la plus récente de l'objet choisi (convention déjà utilisée par la
# Jauge pour un objet "état de partie" qui ne garde qu'une seule ligne).
DATA_BINDING_CONTROLS = [
c_select("data_definition_id", "Lier à un objet de données (pour {{champ}} ci-dessus)",
"attr:_data_definition_id", [("", "(sélectionner un objet)")], default="", group="Donnée liée"),
c_text("data_filtre_champ", "Trouver la ligne où ce champ",
"attr:_data_filtre_champ", placeholder="ex. number", default="", group="Donnée liée"),
c_select("data_filtre_operateur", "...est", "attr:_data_filtre_operateur", CONDITION_OPERATORS, default="egal", group="Donnée liée"),
c_text("data_filtre_valeur", "...cette valeur, ou {{NomObjet.champ}} pour une donnée qui change en cours de partie",
"attr:_data_filtre_valeur", placeholder="ex. 3 ou {{game.current_level}}", default="", group="Donnée liée"),
c_text("data_filtre2_champ", "ET (optionnel) : ce 2ᵉ champ",
"attr:_data_filtre2_champ", placeholder="ex. parcour_id", default="", group="Donnée liée"),
c_select("data_filtre2_operateur", "...est", "attr:_data_filtre2_operateur", CONDITION_OPERATORS, default="egal", group="Donnée liée"),
c_text("data_filtre2_valeur", "...cette valeur, ou {{NomObjet.champ}}",
"attr:_data_filtre2_valeur", placeholder="ex. 1 ou {{game.current_parcours}}", default="", group="Donnée liée"),
]