From 6fce5a4c5db0bbf95cedbe461a6c0d87fbad171d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20R=C3=B6ssler?= Date: Fri, 17 Dec 2021 16:11:34 +0100 Subject: [PATCH] add basic table demo --- Cargo.lock | 1 + egui_demo_lib/Cargo.toml | 1 + .../src/apps/demo/demo_app_windows.rs | 1 + egui_demo_lib/src/apps/demo/mod.rs | 1 + egui_demo_lib/src/apps/demo/table_demo.rs | 59 +++++++++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 egui_demo_lib/src/apps/demo/table_demo.rs diff --git a/Cargo.lock b/Cargo.lock index 70c7c15ec..bf0522520 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -916,6 +916,7 @@ dependencies = [ "criterion", "egui", "egui_datepicker", + "egui_dynamic_grid", "ehttp", "enum-map", "epi", diff --git a/egui_demo_lib/Cargo.toml b/egui_demo_lib/Cargo.toml index 835793f21..c886d2552 100644 --- a/egui_demo_lib/Cargo.toml +++ b/egui_demo_lib/Cargo.toml @@ -20,6 +20,7 @@ all-features = true [dependencies] egui = { version = "0.15.0", path = "../egui", default-features = false } epi = { version = "0.15.0", path = "../epi" } +egui_dynamic_grid = { version = "0.15.0", path = "../egui_dynamic_grid" } egui_datepicker = { version = "0.15.0", path = "../egui_datepicker", optional = true } chrono = { version = "0.4", features = ["js-sys", "wasmbind"], optional = true } diff --git a/egui_demo_lib/src/apps/demo/demo_app_windows.rs b/egui_demo_lib/src/apps/demo/demo_app_windows.rs index 437e2278c..ea1957e01 100644 --- a/egui_demo_lib/src/apps/demo/demo_app_windows.rs +++ b/egui_demo_lib/src/apps/demo/demo_app_windows.rs @@ -28,6 +28,7 @@ impl Default for Demos { Box::new(super::plot_demo::PlotDemo::default()), Box::new(super::scrolling::Scrolling::default()), Box::new(super::sliders::Sliders::default()), + Box::new(super::table_demo::TableDemo::default()), Box::new(super::widget_gallery::WidgetGallery::default()), Box::new(super::window_options::WindowOptions::default()), Box::new(super::tests::WindowResizeTest::default()), diff --git a/egui_demo_lib/src/apps/demo/mod.rs b/egui_demo_lib/src/apps/demo/mod.rs index e8f1a688e..5945c45f2 100644 --- a/egui_demo_lib/src/apps/demo/mod.rs +++ b/egui_demo_lib/src/apps/demo/mod.rs @@ -20,6 +20,7 @@ pub mod password; pub mod plot_demo; pub mod scrolling; pub mod sliders; +pub mod table_demo; pub mod tests; pub mod toggle_switch; pub mod widget_gallery; diff --git a/egui_demo_lib/src/apps/demo/table_demo.rs b/egui_demo_lib/src/apps/demo/table_demo.rs new file mode 100644 index 000000000..8d1c2a12e --- /dev/null +++ b/egui_demo_lib/src/apps/demo/table_demo.rs @@ -0,0 +1,59 @@ +use egui_dynamic_grid::{Padding, Size, TableBuilder}; + +/// Shows off a table with dynamic layout +#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] +#[derive(Default)] +pub struct TableDemo {} + +impl super::Demo for TableDemo { + fn name(&self) -> &'static str { + "☰ Table" + } + + fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool) { + egui::Window::new(self.name()) + .open(open) + .resizable(true) + .default_width(300.0) + .show(ctx, |ui| { + use super::View as _; + self.ui(ui); + }); + } +} + +impl super::View for TableDemo { + fn ui(&mut self, ui: &mut egui::Ui) { + TableBuilder::new(ui, Padding::new(2.0, 5.0)) + .striped(true) + .column(Size::Absolute(100.0)) + .column(Size::RemainderMinimum(150.0)) + .column(Size::Absolute(50.0)) + .header(50.0, |mut header| { + header.col(|ui| { + ui.label("Left"); + }); + header.col(|ui| { + ui.label("Middle"); + }); + header.col(|ui| { + ui.label("Right"); + }); + }) + .body(|mut body| { + for i in 1..100 { + body.row(40.0, |mut row| { + row.col(|ui| { + ui.label(format!("{}", i)); + }); + row.col(|ui| { + ui.label(format!("{}", i)); + }); + row.col(|ui| { + ui.label(format!("{}", i)); + }); + }); + } + }); + } +}