Boutons de cellule
Vue d'ensemble
Les boutons de cellule sont des éléments cliquables dessinés sur canvas, positionnés à droite du contenu d'une cellule. Ils sont définis au niveau de la colonne — les mêmes boutons apparaissent dans chaque ligne. Un clic déclenche un callback avec l'index de ligne, la clé de colonne et l'identifiant du bouton.
ButtonDef
Utiliser ButtonDef::new(id, label, style) :
ButtonStyle
Disposition
Les boutons sont disposés de droite à gauche : le premier élément de
cell_buttons est le bouton le plus à droite. Cela garantit que les
positions restent stables lorsque d'autres boutons sont ajoutés.
La largeur de chaque bouton est estimée à partir du nombre de caractères du
label — aucune mesure Canvas2D n'est effectuée dans la couche scene. Une
largeur de colonne d'au moins
(nb_chars × font_size × 0.65 + padding_x × 2) × nb_boutons + gaps + marge
est recommandée.
Méthode builder
Visibilité
Par défaut, chaque ligne d'une colonne affiche les mêmes boutons. Pour masquer le bouton sur les lignes sans action pertinente (par exemple un produit sans URL connue), attacher un prédicat dynamique par ligne :
Le prédicat reçoit l'index de ligne et le GridModel complet, ce qui permet
de lire n'importe quelle colonne — pas seulement celle-ci — sur le même
principe que ColumnDef::editable_when. None (valeur par défaut) affiche
les boutons sur chaque ligne, comme avant. Quand ils sont masqués, rien n'est
dessiné et aucune zone de clic n'est enregistrée pour cette ligne.
Callback de clic
Couche web (WebGridCanvas)
Composant Leptos
La signature du callback est (row: u64, col_key: String, button_id: String).
Combinaison avec le contenu de la cellule
Les boutons sont rendus par-dessus le texte de la cellule. Pour éviter
tout chevauchement, élargir la colonne ou supprimer le texte via un
CellFormat::Boolean avec des labels vides :
Variables de thème
Toutes les couleurs et dimensions des boutons sont configurables via des propriétés CSS personnalisées :
Notes d'interaction
- Un clic sur un bouton ne sélectionne pas la cellule — l'événement est consommé avant la logique de sélection.
- Les boutons sont testés contre la liste de
ButtonZonedu dernier frame rendu, ils sont donc toujours synchronisés avec la disposition visible. - L'effet hover n'est pas encore implémenté ; il est prévu pour une version future.

