mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Merge example_web into egui_demo_lib
This commit is contained in:
67
egui_demo_lib/src/wrap_app.rs
Normal file
67
egui_demo_lib/src/wrap_app.rs
Normal file
@@ -0,0 +1,67 @@
|
||||
/// Wraps many demo/test apps into one
|
||||
#[derive(Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct WrapApp {
|
||||
selectable_demo_name: String,
|
||||
|
||||
demo: crate::apps::DemoApp,
|
||||
http: crate::apps::HttpApp,
|
||||
}
|
||||
|
||||
impl epi::App for WrapApp {
|
||||
fn name(&self) -> &str {
|
||||
"Egui Demo Apps"
|
||||
}
|
||||
|
||||
fn load(&mut self, storage: &dyn epi::Storage) {
|
||||
*self = epi::get_value(storage, epi::APP_KEY).unwrap_or_default()
|
||||
}
|
||||
|
||||
fn save(&mut self, storage: &mut dyn epi::Storage) {
|
||||
epi::set_value(storage, epi::APP_KEY, self);
|
||||
}
|
||||
|
||||
fn ui(&mut self, ctx: &egui::CtxRef, frame: &mut epi::Frame<'_>) {
|
||||
let web_location_hash = frame
|
||||
.info()
|
||||
.web_info
|
||||
.as_ref()
|
||||
.map(|info| info.web_location_hash.clone())
|
||||
.unwrap_or_default();
|
||||
|
||||
if web_location_hash == "#clock" {
|
||||
// TODO
|
||||
} else if web_location_hash == "#http" {
|
||||
self.selectable_demo_name = self.http.name().to_owned();
|
||||
}
|
||||
|
||||
egui::TopPanel::top("wrap_app").show(ctx, |ui| {
|
||||
ui.horizontal(|ui| {
|
||||
ui.label(format!("web_location_hash: {:?}", web_location_hash));
|
||||
ui.label("Demo Apps:");
|
||||
ui.selectable_value(
|
||||
&mut self.selectable_demo_name,
|
||||
self.demo.name().to_owned(),
|
||||
self.demo.name(),
|
||||
);
|
||||
ui.selectable_value(
|
||||
&mut self.selectable_demo_name,
|
||||
self.http.name().to_owned(),
|
||||
self.http.name(),
|
||||
);
|
||||
|
||||
ui.with_layout(egui::Layout::right_to_left(), |ui| {
|
||||
egui::warn_if_debug_build(ui);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if self.selectable_demo_name == self.demo.name() {
|
||||
self.demo.ui(ctx, frame);
|
||||
} else if self.selectable_demo_name == self.http.name() {
|
||||
self.http.ui(ctx, frame);
|
||||
} else {
|
||||
self.selectable_demo_name = self.demo.name().to_owned();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user