Etat de la grille et commandes

GridState

GridState est la source unique de verite pour une instance de grille. Il regroupe tous les sous-etats dans une seule structure :

pub struct GridState {
    pub model: GridModel,           // colonnes, donnees, dimensionnement
    pub viewport: ViewportState,    // position de scroll, taille du canvas
    pub selection: SelectionState,  // ancre/focus, presse-papiers
    pub hovered_row: Option<u64>,   // ligne sous le curseur
    pub sort: Option<SortState>,    // colonne de tri active + direction
    pub edit: Option<EditCell>,     // cellule en cours d'edition
    pub search: SearchState,        // requete de recherche active + resultats
    history: UndoHistory,           // pile annuler/retablir (prive)
}

Creer un GridState

use rs_grid_core::{GridState, GridModel, column::ColumnDef};

let columns = vec![
    ColumnDef::new("name", "Name", 200.0),
    ColumnDef::new("age", "Age", 100.0),
];
let model = GridModel::new(columns, rows, 32.0, 36.0);
let state = GridState::new(model, 800.0, 600.0);

Mutations par commandes

Toutes les mutations passent par GridState::apply(GridCommand). Ne modifiez jamais les champs de GridState directement -- la methode apply garantit le maintien des invariants (clamping du scroll, enregistrement de l'historique, recalcul des index).

use rs_grid_core::commands::{GridCommand, CommandOutput};

let output = state.apply(GridCommand::ScrollBy { dx: 0.0, dy: 100.0 });

match output {
    CommandOutput::None => { /* la plupart des commandes */ }
    CommandOutput::CopyText(tsv) => { /* texte pour le presse-papiers */ }
    CommandOutput::CopyError(err) => { /* echec du copier/couper */ }
}

Reference des GridCommand

Toutes les commandes disponibles :

Selection

CommandeDescription
SelectCell(CellCoord)Definir une selection mono-cellule
ExtendSelection(CellCoord)Etendre la selection vers un nouveau focus (shift-clic)
ClearSelectionSupprimer la selection courante
MoveSelection { delta_row, delta_col, extend }Deplacer ou etendre la selection par delta
SelectRow(u64)Selectionner toutes les cellules d'une ligne
ExtendRowSelection(u64)Etendre la selection de lignes
SelectCol(usize)Selectionner toutes les cellules d'une colonne
ExtendColSelection(usize)Etendre la selection de colonnes

Scroll et viewport

CommandeDescription
ScrollTo { x, y }Scroller vers une position absolue
ScrollBy { dx, dy }Scroller d'un delta (evenement molette)
Resize { width, height }Mettre a jour les dimensions du canvas

Colonnes

CommandeDescription
ResizeColumn { col_idx, new_width }Definir la largeur d'une colonne
AutoFitColumn { col_idx, char_width, header_char_width, cell_padding }Ajuster automatiquement la colonne au contenu
MoveColumn { from_idx, to_idx }Reordonner par glisser-deposer
SetPinnedColumnCount { count }Epingler les premieres colonnes

Tri et filtrage

CommandeDescription
ToggleSort { col_key }Cycle : Aucun → Ascendant → Descendant → Aucun
SetColumnFilter { col_key, text }Definir un filtre texte par colonne
ClearAllFiltersSupprimer tous les filtres actifs

Edition

CommandeDescription
StartEdit { row, col_key }Demarrer l'edition inline (double-clic)
CommitEdit { row, col_key, value }Enregistrer la modification
CancelEditAnnuler la modification

Presse-papiers

CommandeDescription
CopySelectionCopier la selection en TSV → CommandOutput::CopyText
CutSelectionCopier + effacer les cellules selectionnees
PasteAt { text }Coller du TSV a l'ancre de selection

Recherche

CommandeDescription
Search { query }Rechercher dans toutes les cellules visibles (insensible a la casse)
SearchNextAller au resultat suivant
SearchPrevAller au resultat precedent
ClearSearchEffacer l'etat de recherche

Annuler / Retablir

CommandeDescription
UndoAnnuler la derniere action annulable
RedoRetablir la derniere action annulee

Donnees et affichage

CommandeDescription
SetHoveredRow(Option<u64>)Mettre a jour le surlignage au survol
NotifyPageLoadedDeclencher un re-rendu apres un chargement asynchrone
SetTotalRowCount(u64)Mettre a jour le nombre de lignes pour les sources asynchrones

CommandOutput

apply() retourne un CommandOutput :

pub enum CommandOutput {
    None,                   // la plupart des commandes
    CopyText(String),       // texte TSV pour le presse-papiers
    CopyError(CopyError),   // echec du copier/couper
}

Seules CopySelection et CutSelection produisent une sortie non-None.