#[non_exhaustive] pub enum GridCommand { /* 30 variantes */ }
Toutes les mutations de GridState passent par state.apply(GridCommand).
GridState
state.apply(GridCommand)
SelectCell(CellCoord) ExtendSelection(CellCoord) ClearSelection MoveSelection { delta_row: i64, delta_col: i64, extend: bool } SelectRow(u64) ExtendRowSelection(u64) SelectCol(usize) ExtendColSelection(usize)
ScrollTo { x: f64, y: f64 } ScrollBy { dx: f64, dy: f64 } Resize { width: f64, height: f64 }
ResizeColumn { col_idx: usize, new_width: f64 } AutoFitColumn { col_idx: usize, char_width: f64, header_char_width: f64, cell_padding: f64 } MoveColumn { from_idx: usize, to_idx: usize } SetPinnedColumnCount { count: usize }
ToggleSort { col_key: String } SetColumnFilter { col_key: String, text: String } ClearAllFilters
StartEdit { row: u64, col_key: String } CommitEdit { row: u64, col_key: String, value: String } CancelEdit
CopySelection CutSelection PasteAt { text: String }
Search { query: String } SearchNext SearchPrev ClearSearch
Undo Redo
SetHoveredRow(Option<u64>) NotifyPageLoaded SetTotalRowCount(u64)
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)
#[non_exhaustive] pub enum CommandOutput { None, CopyText(String), CopyError(CopyError), } #[non_exhaustive] pub enum CopyError { NoSelection, TooManyRows, }
CopySelection
CopyText(tsv)
CopyError
CutSelection
None