2021-01-04 00:44:02 +00:00
|
|
|
#[derive(Clone, PartialEq)]
|
|
|
|
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
|
2021-01-02 23:12:54 +00:00
|
|
|
pub struct WindowOptions {
|
|
|
|
title: String,
|
|
|
|
title_bar: bool,
|
2021-01-10 09:41:46 +00:00
|
|
|
closable: bool,
|
2021-01-02 23:12:54 +00:00
|
|
|
collapsible: bool,
|
|
|
|
resizable: bool,
|
|
|
|
scroll: bool,
|
2021-02-07 09:55:45 +00:00
|
|
|
disabled_time: f64,
|
2021-01-02 23:12:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for WindowOptions {
|
|
|
|
fn default() -> Self {
|
|
|
|
Self {
|
|
|
|
title: "🗖 Window Options".to_owned(),
|
|
|
|
title_bar: true,
|
2021-01-10 09:41:46 +00:00
|
|
|
closable: true,
|
2021-01-02 23:12:54 +00:00
|
|
|
collapsible: true,
|
|
|
|
resizable: true,
|
|
|
|
scroll: false,
|
2021-02-07 09:55:45 +00:00
|
|
|
disabled_time: f64::NEG_INFINITY,
|
2021-01-02 23:12:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl super::Demo for WindowOptions {
|
2021-02-20 08:18:23 +00:00
|
|
|
fn name(&self) -> &'static str {
|
|
|
|
"🗖 Window Options"
|
2021-01-02 23:12:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool) {
|
|
|
|
let Self {
|
|
|
|
title,
|
|
|
|
title_bar,
|
2021-01-10 09:41:46 +00:00
|
|
|
closable,
|
2021-01-02 23:12:54 +00:00
|
|
|
collapsible,
|
|
|
|
resizable,
|
|
|
|
scroll,
|
2021-02-07 09:55:45 +00:00
|
|
|
disabled_time,
|
2021-01-02 23:12:54 +00:00
|
|
|
} = self.clone();
|
|
|
|
|
2021-02-07 09:55:45 +00:00
|
|
|
let enabled = ctx.input().time - disabled_time > 2.0;
|
|
|
|
if !enabled {
|
|
|
|
ctx.request_repaint();
|
|
|
|
}
|
|
|
|
|
2021-01-02 23:12:54 +00:00
|
|
|
use super::View;
|
2021-01-10 09:41:46 +00:00
|
|
|
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)
|
2021-02-07 09:55:45 +00:00
|
|
|
.scroll(scroll)
|
|
|
|
.enabled(enabled);
|
2021-01-10 09:41:46 +00:00
|
|
|
if closable {
|
|
|
|
window = window.open(open);
|
|
|
|
}
|
|
|
|
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,
|
2021-01-10 09:41:46 +00:00
|
|
|
closable,
|
2021-01-02 23:12:54 +00:00
|
|
|
collapsible,
|
|
|
|
resizable,
|
|
|
|
scroll,
|
2021-02-07 09:55:45 +00:00
|
|
|
disabled_time,
|
2021-01-02 23:12:54 +00:00
|
|
|
} = self;
|
|
|
|
|
|
|
|
ui.horizontal(|ui| {
|
|
|
|
ui.label("title:");
|
|
|
|
ui.text_edit_singleline(title);
|
|
|
|
});
|
|
|
|
ui.checkbox(title_bar, "title_bar");
|
2021-01-10 09:41:46 +00:00
|
|
|
ui.checkbox(closable, "closable");
|
2021-01-02 23:12:54 +00:00
|
|
|
ui.checkbox(collapsible, "collapsible");
|
|
|
|
ui.checkbox(resizable, "resizable");
|
|
|
|
ui.checkbox(scroll, "scroll");
|
2021-02-07 09:55:45 +00:00
|
|
|
|
|
|
|
if ui.button("Disable for 2 seconds").clicked() {
|
|
|
|
*disabled_time = ui.input().time;
|
|
|
|
}
|
2021-02-07 13:46:53 +00:00
|
|
|
|
|
|
|
ui.vertical_centered(|ui| {
|
|
|
|
egui::reset_button(ui, self);
|
|
|
|
ui.add(crate::__egui_github_link_file!());
|
|
|
|
});
|
2021-01-02 23:12:54 +00:00
|
|
|
}
|
|
|
|
}
|