1 unstable release
0.1.0 | Oct 16, 2024 |
---|
#181 in GUI
180 downloads per month
Used in talon-gui
65KB
873 lines
egui-selectable-table
A library for egui to create tables with draggable cell and row selection.
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
// 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<MyRow, ColumnName, Config> 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<SortOrder>, table: &mut SelectableTable<MyRow, Column, Config>) -> Option<Response> {}
//Create your own table row UI
fn create_table_row(&self, ui: &mut Ui, row: &SelectableRow<MyRow, Column>, selected: bool, table: &mut SelectableTable<MyRow, Column, Config>,) -> Response {}
}
impl ColumnOrdering<MyRow> 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<MyRow, Column, Config>
}
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
-
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 visithttp://127.0.0.1:8080/
- To run natively
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.
Dependencies
~6–11MB
~136K SLoC