API GridCommand

Définition

#[non_exhaustive]
pub enum GridCommand { /* 47 variantes */ }

Toutes les mutations de GridState passent par state.apply(GridCommand).

Toutes les variantes

Sélection

SelectCell(CellCoord)
ExtendSelection(CellCoord)
ClearSelection
MoveSelection { delta_row: i64, delta_col: i64, extend: bool }
SelectRow(u64)
ExtendRowSelection(u64)
SelectCol(usize)
ExtendColSelection(usize)

Cases a cocher de ligne

ToggleRowChecked(u64)          // index logique de ligne — clic sur la colonne checkbox
ToggleAllFilteredChecked       // bascule toutes les lignes qui passent le filtre actif (ou toutes les lignes, sans filtre)
SetShowCheckboxColumn(bool)    // afficher/masquer la colonne de selection par cases a cocher
SetCheckboxColumnWidth(f64)    // largeur en px logiques (la case reste centree — controle aussi la marge)
Note

L'etat coche (GridState.checked_rows) est suivi separement de SelectionState, indexe par id physique de ligne afin de survivre au tri/filtrage. Voir Selection pour le modele complet.

Défilement et viewport

ScrollTo { x: f64, y: f64 }
ScrollBy { dx: f64, dy: f64 }
Resize { width: f64, height: f64 }

Colonnes

ResizeColumn { col_idx: usize, new_width: f64 }
CommitColumnResize { col_idx: usize, old_width: f64, old_flex: Option<f64> }
AutoFitColumn {
    col_idx: usize, char_width: f64,
    header_char_width: f64, cell_padding: f64, header_right_reserve: f64,
}
AutoFitAllColumns {
    char_width: f64, header_char_width: f64,
    cell_padding: f64, header_right_reserve: f64,
}
MoveColumn { from_idx: usize, to_idx: usize }
SetPinnedColumnCount { count: usize }
Note

CommitColumnResize enregistre l'ancienne taille pour l'historique d'annulation. Pour un redimensionnement programmatique, utiliser ResizeColumn directement.

Tri et filtrage

ToggleSort { col_key: String }               // alterne asc → desc → off
SetSort { col_key: String, dir: SortDir }    // direction explicite
ClearSort
SetColumnFilter { col_key: String, text: String }
ClearAllFilters

Édition

StartEdit { row: u64, col_key: String }
ValidateEdit { value: String }
CommitEdit { row: u64, col_key: String, value: String }
CancelEdit
SetInvalidEditMode(InvalidEditMode)
ClearCells   // Suppr/Retour arrière — efface les cellules sélectionnées, sans presse-papiers
Note

ValidateEdit revérifie la valeur en cours d'édition sans valider — un no-op sans édition active, et ça ne crée aucune entrée d'annulation. rs-grid-web le déclenche à chaque frappe pour un retour live. Voir Validation pour ValidationRule et InvalidEditMode.

Presse-papiers

CopySelection
CutSelection
PasteAt { text: String }

Recherche

Search { query: String }
SearchNext
SearchPrev
ClearSearch

Annuler / Rétablir

Undo
Redo

Affichage

SetHeaderHeight(f64)
SetRowHeight(f64)
SetShowHeader(bool)
SetShowRowNumbers(bool)
SetHoveredRow(Option<u64>)

Données côté serveur

NotifyPageLoaded       // signal qu'un chargement de page est terminé
SetTotalRowCount(u64)  // mettre à jour le nombre total de lignes (mode serveur)

Toggles de comportement

SetEditable(bool)          // édition inline globale on/off
SetSelectable(bool)        // sélection globale on/off (vide la sélection si false)
SetColumnReorderable(bool) // drag-to-reorder des en-têtes on/off (MoveColumn intact)

CommandOutput

#[non_exhaustive]
pub enum CommandOutput {
    None,
    CopyText(String),
    CopyError(CopyError),
    ValidationError { row: u64, col_key: String, message: String },
    PasteApplied { cells: Vec<CellCoord> },
    CellsCleared { cells: Vec<CellCoord> },
}

#[non_exhaustive]
pub enum CopyError {
    NoSelection,
    TooManyRows,
}
CommandeRésultat
CopySelectionCopyText(tsv) ou CopyError
CutSelectionCopyText(tsv) ou CopyError
CommitEdit (rejeté)ValidationError { row, col_key, message } — déclenché pour InvalidEditMode::Revert comme ::Block
PasteAtPasteApplied { cells } — coordonnées réellement écrites, un sous-ensemble du rectangle cible (cellules verrouillées/invalides ignorées)
ClearCellsCellsCleared { cells } — coordonnées réellement effacées, un sous-ensemble de la sélection ; non émis si rien n'a été effacé
Toutes les autresNone

cells de PasteApplied/CellsCleared est ce que rs-grid-web transmet à son animation de flash de succès, plutôt que le rectangle complet de sélection/cible — voir Sélection et presse-papiers.