egui/egui_demo_lib/src/apps/demo/window_options.rs

142 lines
4.3 KiB
Rust
Raw Normal View History

#[derive(Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
2021-01-02 23:12:54 +00:00
pub struct WindowOptions {
title: String,
title_bar: bool,
closable: bool,
2021-01-02 23:12:54 +00:00
collapsible: bool,
resizable: bool,
scroll2: [bool; 2],
disabled_time: f64,
anchored: bool,
anchor: egui::Align2,
anchor_offset: egui::Vec2,
2021-01-02 23:12:54 +00:00
}
impl Default for WindowOptions {
fn default() -> Self {
Self {
title: "🗖 Window Options".to_owned(),
title_bar: true,
closable: true,
2021-01-02 23:12:54 +00:00
collapsible: true,
resizable: true,
scroll2: [true; 2],
disabled_time: f64::NEG_INFINITY,
anchored: false,
anchor: egui::Align2::RIGHT_TOP,
anchor_offset: egui::Vec2::ZERO,
2021-01-02 23:12:54 +00:00
}
}
}
impl super::Demo for WindowOptions {
fn name(&self) -> &'static str {
"🗖 Window Options"
2021-01-02 23:12:54 +00:00
}
fn show(&mut self, ctx: &egui::Context, open: &mut bool) {
2021-01-02 23:12:54 +00:00
let Self {
title,
title_bar,
closable,
2021-01-02 23:12:54 +00:00
collapsible,
resizable,
scroll2,
disabled_time,
anchored,
anchor,
anchor_offset,
2021-01-02 23:12:54 +00:00
} = self.clone();
let enabled = ctx.input().time - disabled_time > 2.0;
if !enabled {
ctx.request_repaint();
}
2021-10-07 19:39:04 +00:00
use super::View as _;
let mut window = egui::Window::new(title)
2021-01-02 23:12:54 +00:00
.id(egui::Id::new("demo_window_options")) // required since we change the title
.resizable(resizable)
.collapsible(collapsible)
.title_bar(title_bar)
.scroll2(scroll2)
.enabled(enabled);
if closable {
window = window.open(open);
}
if anchored {
window = window.anchor(anchor, anchor_offset);
}
window.show(ctx, |ui| self.ui(ui));
2021-01-02 23:12:54 +00:00
}
}
impl super::View for WindowOptions {
fn ui(&mut self, ui: &mut egui::Ui) {
let Self {
title,
title_bar,
closable,
2021-01-02 23:12:54 +00:00
collapsible,
resizable,
scroll2,
2021-08-23 19:28:06 +00:00
disabled_time: _,
anchored,
anchor,
anchor_offset,
2021-01-02 23:12:54 +00:00
} = self;
ui.horizontal(|ui| {
ui.label("title:");
ui.text_edit_singleline(title);
});
2021-08-23 19:28:06 +00:00
ui.horizontal(|ui| {
ui.group(|ui| {
ui.vertical(|ui| {
ui.checkbox(title_bar, "title_bar");
ui.checkbox(closable, "closable");
ui.checkbox(collapsible, "collapsible");
ui.checkbox(resizable, "resizable");
ui.checkbox(&mut scroll2[0], "hscroll");
ui.checkbox(&mut scroll2[1], "vscroll");
2021-08-23 19:28:06 +00:00
});
});
2021-08-23 19:28:06 +00:00
ui.group(|ui| {
ui.vertical(|ui| {
ui.checkbox(anchored, "anchored");
ui.set_enabled(*anchored);
ui.horizontal(|ui| {
ui.label("x:");
ui.selectable_value(&mut anchor[0], egui::Align::LEFT, "Left");
ui.selectable_value(&mut anchor[0], egui::Align::Center, "Center");
ui.selectable_value(&mut anchor[0], egui::Align::RIGHT, "Right");
2021-08-23 19:28:06 +00:00
});
ui.horizontal(|ui| {
ui.label("y:");
ui.selectable_value(&mut anchor[1], egui::Align::TOP, "Top");
ui.selectable_value(&mut anchor[1], egui::Align::Center, "Center");
ui.selectable_value(&mut anchor[1], egui::Align::BOTTOM, "Bottom");
2021-08-23 19:28:06 +00:00
});
ui.horizontal(|ui| {
ui.label("Offset:");
ui.add(egui::DragValue::new(&mut anchor_offset.x));
ui.add(egui::DragValue::new(&mut anchor_offset.y));
});
});
});
});
2021-08-23 19:28:06 +00:00
ui.separator();
2021-02-07 13:46:53 +00:00
2021-08-23 19:28:06 +00:00
ui.horizontal(|ui| {
if ui.button("Disable for 2 seconds").clicked() {
self.disabled_time = ui.input().time;
}
2021-02-07 13:46:53 +00:00
egui::reset_button(ui, self);
ui.add(crate::__egui_github_link_file!());
});
2021-01-02 23:12:54 +00:00
}
}