Selection
rs-grid utilise un modele de selection ancre/focus. L'ancre est le point de depart de la selection ; le focus est le point ou elle se termine actuellement. Le shift-clic etend la selection de l'ancre vers un nouveau focus.
SelectionState
SelectionState suit deux positions :
Chaque position peut faire reference a une cellule, une ligne ou une colonne. La granularite mixte (ancre sur une cellule, focus sur une ligne) n'est pas supportee.
Commandes
Hit-testing
Etant donne une coordonnee pixel (x, y) relative au canvas, le
hit-testing retourne la cellule sous le curseur :
Le hit-testing utilise le meme tableau precalcule de decalages de colonnes que le viewport, offrant une performance O(log n). Le hit-testing des lignes est O(1) avec une hauteur de ligne uniforme.
N'introduisez jamais un parcours O(n) dans le chemin du hit-testing. La garantie O(log n) est un invariant fondamental.
Rendu de la selection
SceneBuilder lit SelectionState et emet des entrees
ScenePrimitive::Rect avec la couleur de surbrillance de selection pour
chaque cellule selectionnee dans le viewport.
Meme avec une selection de toute la grille (toutes les lignes x toutes les colonnes), seules les primitives des cellules visibles sont construites. La taille de la scene est limitee par le viewport, pas par la taille de la selection.
Colonne de cases a cocher (selection de lignes)
Independamment de la selection ancre/focus ci-dessus, rs-grid propose une colonne de cases a cocher optionnelle pour la selection de lignes, avec une case par ligne et une case tri-etat dans le header ("tout cocher"). Contrairement a la gouttiere des numeros de ligne, ce n'est pas une bande fixe/epinglee — c'est la premiere colonne de la zone scrollable, elle disparait donc au scroll horizontal comme une colonne normale.
L'etat coche est suivi separement de SelectionState, par id physique
de ligne (pas par position d'affichage), donc il survit au tri et au
filtrage :
CheckboxTriState (Checked / Unchecked / Indeterminate) decrit l'etat
de la case du header — Indeterminate quand certaines lignes du perimetre
sont cochees mais pas toutes. Cliquer sur une case indeterminee coche
toutes les lignes du perimetre plutot que de les decocher.
Sur GridCanvas (l'integration navigateur) :
"Tout cocher" n'affecte que les lignes qui passent le filtre actif, pas l'ensemble du jeu de donnees — cocher des lignes masquees par un filtre serait surprenant pour une action en masse ulterieure (coherent avec la convention utilisee par la plupart des bibliotheques de grilles de donnees).

