[demo] Persist which demo windows are open
This commit is contained in:
parent
26d576f510
commit
d0c3bd0d8f
1 changed files with 19 additions and 13 deletions
|
@ -5,33 +5,39 @@ use egui::{CtxRef, Resize, ScrollArea, Ui, Window};
|
||||||
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
|
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
|
||||||
#[cfg_attr(feature = "persistence", serde(default))]
|
#[cfg_attr(feature = "persistence", serde(default))]
|
||||||
struct Demos {
|
struct Demos {
|
||||||
/// open, view
|
open: Vec<bool>,
|
||||||
#[cfg_attr(feature = "persistence", serde(skip))] // TODO: serialize the `open` state.
|
|
||||||
demos: Vec<(bool, Box<dyn super::Demo>)>,
|
#[cfg_attr(feature = "persistence", serde(skip))]
|
||||||
|
demos: Vec<Box<dyn super::Demo>>,
|
||||||
}
|
}
|
||||||
impl Default for Demos {
|
impl Default for Demos {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
let demos: Vec<Box<dyn super::Demo>> = vec![
|
||||||
|
Box::new(super::FontBook::default()),
|
||||||
|
Box::new(super::Painting::default()),
|
||||||
|
Box::new(super::DancingStrings::default()),
|
||||||
|
Box::new(super::DragAndDropDemo::default()),
|
||||||
|
Box::new(super::Tests::default()),
|
||||||
|
Box::new(super::WindowOptions::default()),
|
||||||
|
];
|
||||||
Self {
|
Self {
|
||||||
demos: vec![
|
open: vec![false; demos.len()],
|
||||||
(false, Box::new(super::FontBook::default())),
|
demos,
|
||||||
(false, Box::new(super::Painting::default())),
|
|
||||||
(false, Box::new(super::DancingStrings::default())),
|
|
||||||
(false, Box::new(super::DragAndDropDemo::default())),
|
|
||||||
(false, Box::new(super::Tests::default())),
|
|
||||||
(false, Box::new(super::WindowOptions::default())),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl Demos {
|
impl Demos {
|
||||||
pub fn checkboxes(&mut self, ui: &mut Ui) {
|
pub fn checkboxes(&mut self, ui: &mut Ui) {
|
||||||
for (ref mut open, demo) in &mut self.demos {
|
let Self { open, demos } = self;
|
||||||
|
for (ref mut open, demo) in open.iter_mut().zip(demos.iter()) {
|
||||||
ui.checkbox(open, demo.name());
|
ui.checkbox(open, demo.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show(&mut self, ctx: &CtxRef) {
|
pub fn show(&mut self, ctx: &CtxRef) {
|
||||||
for (ref mut open, demo) in &mut self.demos {
|
let Self { open, demos } = self;
|
||||||
|
open.resize(demos.len(), false); // Handle deserialization of old data.
|
||||||
|
for (ref mut open, demo) in open.iter_mut().zip(demos.iter_mut()) {
|
||||||
demo.show(ctx, open);
|
demo.show(ctx, open);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue