# egui-selectable-table Crates version Downloads A library for [egui](https://github.com/emilk/egui) to create tables with draggable cell and row selection. [](https://github.com/user-attachments/assets/54aadfbf-e795-4948-933b-68c08dce6242) ## Features - Individual cell or full-row selection while dragging - Auto vertical table scrolling during drag with adjustable parameters - Sort rows by clicking headers, both ascending and descending - Customizable rows and header UI - Built-in select all (Ctrl+A) and copy (Ctrl+C) functionality - Capable of handling a substantial amount of rows (1M+) with proper settings ## Usage ```rust // See Demo folder for a complete example use egui_selectable_table::{ ColumnOperations, ColumnOrdering, SelectableRow, SelectableTable, SortOrder, }; // other use imports struct Config { // anything you want to pass } struct MyRow { field_1: String, // .. more fields } enum Column { Field1, // .. more column names } // Implement both traits for row and column impl ColumnOperations for Column { // The text of a row based on the column fn column_text(&self, row: &WhiteListRowData) -> String {} // Create your own header or no header fn create_header(&self, ui: &mut Ui, sort_order: Option, table: &mut SelectableTable) -> Option {} //Create your own table row UI fn create_table_row(&self, ui: &mut Ui, row: &SelectableRow, selected: bool, table: &mut SelectableTable,) -> Response {} } impl ColumnOrdering for Column { fn order_by(&self, row_1: &MyRow, row_2: &MyRow) -> std::cmp::Ordering { match self { Column::Field1 => row_1.field_1.cmp(&row_2.field_1), } } } pub struct MainWindow { table: SelectableTable } impl MainWindow { pub fn new() -> Self { Self { table: SelectableTable::new(vec![Column::Field1]) } } } impl eframe::App for MainWindow { fn update(&mut self, ctx: &eframe::egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { self.table.show_ui(ui |table| { table.striped(true) .cell_layout(Layout::left_to_right(Align::Center)) .column(Column::exact(column_size).clip(true)) }) }); } } ``` ## Run Demo The demo is accessible online via [this link](https://therustypickle.github.io/egui-selectable-table/) - Clone the repository `git clone https://github.com/TheRustyPickle/egui-selectable-table` - Move into the demo folder `cd egui-selectable-table/demo` - To run natively `cargo run --release` or - To run in wasm locally install the required target with `rustup target add wasm32-unknown-unknown` - Install Trunk with `cargo install --locked trunk` - `trunk serve` to run and visit `http://127.0.0.1:8080/` ## Contributing Contributions, issues, and feature requests are welcome! If you'd like to contribute, please open a pull request. ## License This project is licensed under the MIT License.