mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 13:50:04 -04:00
125 lines
3.9 KiB
Rust
125 lines
3.9 KiB
Rust
#[derive(PartialEq)]
|
|
pub struct GridTest {
|
|
num_cols: usize,
|
|
num_rows: usize,
|
|
min_col_width: f32,
|
|
max_col_width: f32,
|
|
text_length: usize,
|
|
}
|
|
|
|
impl Default for GridTest {
|
|
fn default() -> Self {
|
|
Self {
|
|
num_cols: 4,
|
|
num_rows: 4,
|
|
min_col_width: 10.0,
|
|
max_col_width: 200.0,
|
|
text_length: 10,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl crate::Demo for GridTest {
|
|
fn name(&self) -> &'static str {
|
|
"Grid Test"
|
|
}
|
|
|
|
fn show(&mut self, ctx: &egui::Context, open: &mut bool) {
|
|
egui::Window::new(self.name()).open(open).show(ctx, |ui| {
|
|
use crate::View as _;
|
|
self.ui(ui);
|
|
});
|
|
}
|
|
}
|
|
|
|
impl crate::View for GridTest {
|
|
fn ui(&mut self, ui: &mut egui::Ui) {
|
|
ui.add(
|
|
egui::Slider::new(&mut self.min_col_width, 0.0..=400.0).text("Minimum column width"),
|
|
);
|
|
ui.add(
|
|
egui::Slider::new(&mut self.max_col_width, 0.0..=400.0).text("Maximum column width"),
|
|
);
|
|
ui.add(egui::Slider::new(&mut self.num_cols, 0..=5).text("Columns"));
|
|
ui.add(egui::Slider::new(&mut self.num_rows, 0..=20).text("Rows"));
|
|
|
|
ui.separator();
|
|
|
|
let words = [
|
|
"random", "words", "in", "a", "random", "order", "that", "just", "keeps", "going",
|
|
"with", "some", "more",
|
|
];
|
|
|
|
egui::Grid::new("my_grid")
|
|
.striped(true)
|
|
.min_col_width(self.min_col_width)
|
|
.max_col_width(self.max_col_width)
|
|
.show(ui, |ui| {
|
|
for row in 0..self.num_rows {
|
|
for col in 0..self.num_cols {
|
|
if col == 0 {
|
|
ui.label(format!("row {row}"));
|
|
} else {
|
|
let word_idx = row * 3 + col * 5;
|
|
let word_count = (row * 5 + col * 75) % 13;
|
|
let mut string = String::new();
|
|
for word in words.iter().cycle().skip(word_idx).take(word_count) {
|
|
string += word;
|
|
string += " ";
|
|
}
|
|
ui.label(string);
|
|
}
|
|
}
|
|
ui.end_row();
|
|
}
|
|
});
|
|
|
|
ui.separator();
|
|
ui.add(egui::Slider::new(&mut self.text_length, 1..=40).text("Text length"));
|
|
egui::Grid::new("parent grid").striped(true).show(ui, |ui| {
|
|
ui.vertical(|ui| {
|
|
ui.label("Vertical nest1");
|
|
ui.label("Vertical nest2");
|
|
});
|
|
ui.label("First row, second column");
|
|
ui.end_row();
|
|
|
|
ui.horizontal(|ui| {
|
|
ui.label("Horizontal nest1");
|
|
ui.label("Horizontal nest2");
|
|
});
|
|
ui.label("Second row, second column");
|
|
ui.end_row();
|
|
|
|
ui.scope(|ui| {
|
|
ui.label("Scope nest 1");
|
|
ui.label("Scope nest 2");
|
|
});
|
|
ui.label("Third row, second column");
|
|
ui.end_row();
|
|
|
|
egui::Grid::new("nested grid").show(ui, |ui| {
|
|
ui.label("Grid nest11");
|
|
ui.label("Grid nest12");
|
|
ui.end_row();
|
|
ui.label("Grid nest21");
|
|
ui.label("Grid nest22");
|
|
ui.end_row();
|
|
});
|
|
ui.label("Fourth row, second column");
|
|
ui.end_row();
|
|
|
|
let mut dyn_text = String::from("O");
|
|
dyn_text.extend(std::iter::repeat_n('h', self.text_length));
|
|
ui.label(dyn_text);
|
|
ui.label("Fifth row, second column");
|
|
ui.end_row();
|
|
});
|
|
|
|
ui.vertical_centered(|ui| {
|
|
egui::reset_button(ui, self, "Reset");
|
|
ui.add(crate::egui_github_link_file!());
|
|
});
|
|
}
|
|
}
|