Skip to content

Commit

Permalink
Add basic Table (#2)
Browse files Browse the repository at this point in the history
Has most of the functionality, and all of the bugs
  • Loading branch information
emilk authored Sep 4, 2024
1 parent f62e437 commit e0561ce
Show file tree
Hide file tree
Showing 11 changed files with 733 additions and 23 deletions.
21 changes: 7 additions & 14 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,26 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
// Python
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
// Rust:
{
"name": "Debug 'PROJ_NAME'",
"name": "Debug 'demo'",
"type": "lldb",
"request": "launch",
"cargo": {
"args": [
"build"
"build",
"--package=demo",
],
"filter": {
"name": "PROJ_NAME",
"name": "demo",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}",
"env": {
"RUST_BACKTRACE": "1",
"RUST_LOG": "debug"
}
},
"args": [],
},
{
"name": "Launch Rust tests",
Expand Down
8 changes: 8 additions & 0 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,8 @@ name = "egui_table"
version = "0.28.1"
dependencies = [
"egui",
"serde",
"vec1",
]

[[package]]
Expand Down Expand Up @@ -1706,6 +1708,12 @@ dependencies = [
"percent-encoding",
]

[[package]]
name = "vec1"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322"

[[package]]
name = "version_check"
version = "0.9.5"
Expand Down
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ eframe = { version = "0.28.1", default-features = false }
egui = { version = "0.28.1", default-features = false }
egui_extras = { version = "0.28.1", default-features = false }
emath = { version = "0.28.1", default-features = false }
serde = { version = "1", features = ["derive"] }
serde = { version = "1", default-features = false, features = ["derive"] }
vec1 = { version = "1.12.1", default-features = false }


[patch.crates-io]
Expand Down
24 changes: 21 additions & 3 deletions demo/src/app.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
#[derive(Default, Clone, Copy, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
enum Demo {
#[default]
Table,
Scroll,
}

#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
pub struct DemoApp {
demo: crate::split_scroll_demo::SplitScrollDemo,
demo: Demo,

table_demo: crate::table_demo::TableDemo,
scroll_demo: crate::split_scroll_demo::SplitScrollDemo,
}

impl DemoApp {
Expand All @@ -28,6 +38,13 @@ impl eframe::App for DemoApp {
egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
egui::menu::bar(ui, |ui| {
egui::widgets::global_dark_light_mode_buttons(ui);
ui.add_space(16.0);

ui.horizontal(|ui| {
ui.label("Demo:");
ui.radio_value(&mut self.demo, Demo::Table, "Table");
ui.radio_value(&mut self.demo, Demo::Scroll, "Scroll");
});

ui.add_space(16.0);

Expand All @@ -39,8 +56,9 @@ impl eframe::App for DemoApp {
});
});

egui::CentralPanel::default().show(ctx, |ui| {
self.demo.ui(ui);
egui::CentralPanel::default().show(ctx, |ui| match self.demo {
Demo::Table => self.table_demo.ui(ui),
Demo::Scroll => self.scroll_demo.ui(ui),
});
}
}
1 change: 1 addition & 0 deletions demo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

mod app;
mod split_scroll_demo;
mod table_demo;

pub use app::DemoApp;

Expand Down
109 changes: 109 additions & 0 deletions demo/src/table_demo.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
use egui_table::{AutoSizeMode, Column, Table, TableDelegate};

#[derive(serde::Deserialize, serde::Serialize)]
pub struct TableDemo {
num_columns: usize,
num_rows: usize,
num_sticky_cols: usize,
default_column: Column,
auto_size_mode: AutoSizeMode,
}

impl Default for TableDemo {
fn default() -> Self {
Self {
num_columns: 10,
num_rows: 100,
num_sticky_cols: 2,
default_column: Column::new(100.0, 10.0..=500.0),
auto_size_mode: AutoSizeMode::default(),
}
}
}

impl TableDelegate for TableDemo {
fn cell_ui(&mut self, ui: &mut egui::Ui, row_nr: usize, col_nr: usize) {
ui.add_space(4.0);

if row_nr == 0 {
ui.heading(format!("Column {col_nr}"));
} else {
if row_nr % 2 == 1 {
ui.painter()
.rect_filled(ui.max_rect(), 0.0, ui.visuals().faint_bg_color);
}
ui.label(format!("({row_nr}, {col_nr})"));
}

ui.add_space(4.0);
}
}

impl TableDemo {
pub fn ui(&mut self, ui: &mut egui::Ui) {
egui::Grid::new("settings").num_columns(2).show(ui, |ui| {
ui.label("Columns");
ui.add(egui::DragValue::new(&mut self.num_columns).speed(1.0));
ui.end_row();

ui.label("Rows");
let speed = 1.0 + 0.05 * self.num_rows as f32;
ui.add(
egui::DragValue::new(&mut self.num_rows)
.speed(speed)
.range(0..=10_000),
);
ui.end_row();

ui.label("Sticky columns");
ui.add(egui::DragValue::new(&mut self.num_sticky_cols).speed(1.0));
ui.end_row();

ui.label("Default column width");
ui.add(egui::DragValue::new(&mut self.default_column.current).speed(1.0));
ui.end_row();

ui.label("Column width range");
ui.horizontal(|ui| {
let range = &mut self.default_column.range;
ui.add(
egui::DragValue::new(&mut range.min)
.speed(1.0)
.range(0.0..=range.max),
);
ui.label("to");
ui.add(
egui::DragValue::new(&mut range.max)
.speed(1.0)
.range(range.min..=1000.0),
);
});
ui.end_row();

ui.label("Auto-size mode");
ui.horizontal(|ui| {
ui.radio_value(&mut self.auto_size_mode, AutoSizeMode::Never, "Never");
ui.radio_value(&mut self.auto_size_mode, AutoSizeMode::Always, "Always");
ui.radio_value(
&mut self.auto_size_mode,
AutoSizeMode::OnParentResize,
"OnParentResize",
);
});
ui.end_row();
});

ui.separator();

Table {
columns: vec![self.default_column; self.num_columns],
id_salt: egui::Id::new("table_demo"),
num_sticky_cols: self.num_sticky_cols,
sticky_row_heights: vec![20.0; 1],
row_height: 16.0,
num_rows: self.num_rows,
auto_size_mode: self.auto_size_mode,
}
.show(ui, self);
}
}
4 changes: 3 additions & 1 deletion egui_table/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ default = []


[dependencies]
egui = { workspace = true, default-features = false }
egui = { workspace = true, default-features = false, features = ["serde"] }
serde.workspace = true
vec1.workspace = true
Loading

0 comments on commit e0561ce

Please sign in to comment.