generated from lks/eframe_template_android
Clean up ui
This commit is contained in:
parent
9f18bb6920
commit
d878f66bd8
175
src/app.rs
175
src/app.rs
@ -16,15 +16,12 @@ const FFT_SIZE: usize = 1024;
|
|||||||
|
|
||||||
pub struct TemplateApp {
|
pub struct TemplateApp {
|
||||||
plots: DebugPlots,
|
plots: DebugPlots,
|
||||||
// Example stuff:
|
|
||||||
label: String,
|
|
||||||
value: f32,
|
|
||||||
/// Behind an `Arc<Mutex<…>>` so we can pass it to [`egui::PaintCallback`] and paint later.
|
/// Behind an `Arc<Mutex<…>>` so we can pass it to [`egui::PaintCallback`] and paint later.
|
||||||
waterfall: Arc<Mutex<Waterfall>>,
|
waterfall: Arc<Mutex<Waterfall>>,
|
||||||
_fft: Fft,
|
fft: Fft,
|
||||||
_backends: backend::Backends,
|
backends: backend::Backends,
|
||||||
_selected_backend: usize,
|
selected_backend: usize,
|
||||||
_open_device: Option<Box<dyn backend::Device>>,
|
open_device: Option<Box<dyn backend::Device>>,
|
||||||
device_window_open: bool,
|
device_window_open: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,15 +46,11 @@ impl TemplateApp {
|
|||||||
|
|
||||||
Self {
|
Self {
|
||||||
plots,
|
plots,
|
||||||
// Example stuff:
|
|
||||||
label: "Hello World!".to_owned(),
|
|
||||||
value: 2.7,
|
|
||||||
waterfall: Arc::new(Mutex::new(Waterfall::new(gl, wf_size, wf_size, rx))),
|
waterfall: Arc::new(Mutex::new(Waterfall::new(gl, wf_size, wf_size, rx))),
|
||||||
//_stream: stream,
|
fft,
|
||||||
_fft: fft,
|
backends: Backends::default(),
|
||||||
_backends: Backends::default(),
|
selected_backend: 0,
|
||||||
_selected_backend: 0,
|
open_device: None,
|
||||||
_open_device: None,
|
|
||||||
device_window_open: true,
|
device_window_open: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,15 +70,11 @@ impl eframe::App for TemplateApp {
|
|||||||
|
|
||||||
/// Called each time the UI needs repainting, which may be many times per second.
|
/// Called each time the UI needs repainting, which may be many times per second.
|
||||||
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
||||||
// Put your widgets into a `SidePanel`, `TopBottomPanel`, `CentralPanel`, `Window` or `Area`.
|
|
||||||
// For inspiration and more examples, go to https://emilk.github.io/egui
|
|
||||||
|
|
||||||
ctx.request_repaint();
|
ctx.request_repaint();
|
||||||
self.plots.update_plots();
|
self.plots.update_plots();
|
||||||
|
|
||||||
|
// Menu bar
|
||||||
egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
|
egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
|
||||||
// The top panel is often a good place for a menu bar:
|
|
||||||
|
|
||||||
egui::menu::bar(ui, |ui| {
|
egui::menu::bar(ui, |ui| {
|
||||||
// NOTE: no File->Quit on web pages!
|
// NOTE: no File->Quit on web pages!
|
||||||
let is_web = cfg!(target_arch = "wasm32");
|
let is_web = cfg!(target_arch = "wasm32");
|
||||||
@ -106,86 +95,14 @@ impl eframe::App for TemplateApp {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
self.plots.render_plot_windows(ctx);
|
|
||||||
|
|
||||||
if self._open_device.is_none() {
|
|
||||||
self.device_window_open = true;
|
|
||||||
}
|
|
||||||
let mut close_device_window = false;
|
|
||||||
egui::Window::new("Select Device")
|
|
||||||
.open(&mut self.device_window_open)
|
|
||||||
.default_width(600.0)
|
|
||||||
.default_height(400.0)
|
|
||||||
.vscroll(false)
|
|
||||||
.resizable(true)
|
|
||||||
.show(ctx, |ui| {
|
|
||||||
egui::SidePanel::left("Select Driver")
|
|
||||||
.resizable(true)
|
|
||||||
.default_width(150.0)
|
|
||||||
.width_range(80.0..=200.0)
|
|
||||||
.show_inside(ui, |ui| {
|
|
||||||
ScrollArea::vertical().show(ui, |ui| {
|
|
||||||
ui.with_layout(
|
|
||||||
egui::Layout::top_down_justified(egui::Align::LEFT),
|
|
||||||
|ui| {
|
|
||||||
for (i, b) in self._backends.0.iter().enumerate() {
|
|
||||||
ui.selectable_value(
|
|
||||||
&mut self._selected_backend,
|
|
||||||
i,
|
|
||||||
b.display_text(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
ui.vertical_centered(|ui| {
|
|
||||||
egui::ScrollArea::vertical().show(ui, |ui| {
|
|
||||||
//if self._selected_backend < self._backends.0.len() {
|
|
||||||
if let Some(b) = self._backends.0.get_mut(self._selected_backend) {
|
|
||||||
//let mut b = &self._backends.0[self._selected_backend];
|
|
||||||
b.show_device_selection(ui);
|
|
||||||
if ui.add(egui::Button::new("Apply")).clicked() {
|
|
||||||
drop(self._open_device.take());
|
|
||||||
if let Ok(device) =
|
|
||||||
b.build_device(self._fft.tx.clone(), self.plots.get_sender())
|
|
||||||
{
|
|
||||||
self._open_device = Some(device);
|
|
||||||
close_device_window = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ui.add(egui::Label::new("Select a Device Driver"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
if close_device_window {
|
|
||||||
self.device_window_open = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
egui::CentralPanel::default().show(ctx, |ui| {
|
egui::CentralPanel::default().show(ctx, |ui| {
|
||||||
// The central panel the region left after adding TopPanel's and SidePanel's
|
egui::TopBottomPanel::top("Plot")
|
||||||
ui.heading("eframe template");
|
.resizable(true)
|
||||||
|
.show_inside(ui, |_ui| {
|
||||||
ui.horizontal(|ui| {
|
// TODO: Add plot
|
||||||
ui.label("Write something: ");
|
|
||||||
ui.text_edit_singleline(&mut self.label);
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.add(egui::Slider::new(&mut self.value, 0.0..=10.0).text("value"));
|
|
||||||
if ui.button("Increment").clicked() {
|
|
||||||
self.value += 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ui.separator();
|
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.spacing_mut().item_spacing.x = 0.0;
|
|
||||||
ui.label("The texture is being painted using ");
|
|
||||||
ui.hyperlink_to("glow", "https://github.com/grovesNL/glow");
|
|
||||||
ui.label(" (OpenGL).");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
egui::CentralPanel::default().show_inside(ui, |ui| {
|
||||||
ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| {
|
ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| {
|
||||||
powered_by_egui_and_eframe(ui);
|
powered_by_egui_and_eframe(ui);
|
||||||
egui::warn_if_debug_build(ui);
|
egui::warn_if_debug_build(ui);
|
||||||
@ -211,6 +128,66 @@ impl eframe::App for TemplateApp {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update debug plot windows
|
||||||
|
self.plots.render_plot_windows(ctx);
|
||||||
|
|
||||||
|
// Update device selection window
|
||||||
|
let mut device_window = egui::Window::new("Select Device")
|
||||||
|
.default_width(600.0)
|
||||||
|
.default_height(400.0)
|
||||||
|
.vscroll(false)
|
||||||
|
.resizable(true)
|
||||||
|
.collapsible(false);
|
||||||
|
if self.open_device.is_some() {
|
||||||
|
device_window = device_window.open(&mut self.device_window_open);
|
||||||
|
} else {
|
||||||
|
device_window = device_window.anchor(egui::Align2::CENTER_CENTER, [0., 0.]);
|
||||||
|
}
|
||||||
|
let mut close_device_window = false;
|
||||||
|
device_window.show(ctx, |ui| {
|
||||||
|
egui::SidePanel::left("Select Driver")
|
||||||
|
.resizable(true)
|
||||||
|
.default_width(150.0)
|
||||||
|
.width_range(80.0..=200.0)
|
||||||
|
.show_inside(ui, |ui| {
|
||||||
|
ScrollArea::vertical().show(ui, |ui| {
|
||||||
|
ui.with_layout(egui::Layout::top_down_justified(egui::Align::LEFT), |ui| {
|
||||||
|
for (i, b) in self.backends.0.iter().enumerate() {
|
||||||
|
ui.selectable_value(
|
||||||
|
&mut self.selected_backend,
|
||||||
|
i,
|
||||||
|
b.display_text(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
ui.vertical_centered(|ui| {
|
||||||
|
egui::ScrollArea::vertical().show(ui, |ui| {
|
||||||
|
//if self._selected_backend < self._backends.0.len() {
|
||||||
|
if let Some(b) = self.backends.0.get_mut(self.selected_backend) {
|
||||||
|
//let mut b = &self._backends.0[self._selected_backend];
|
||||||
|
b.show_device_selection(ui);
|
||||||
|
if ui.add(egui::Button::new("Apply")).clicked() {
|
||||||
|
drop(self.open_device.take());
|
||||||
|
if let Ok(device) =
|
||||||
|
b.build_device(self.fft.tx.clone(), self.plots.get_sender())
|
||||||
|
{
|
||||||
|
self.open_device = Some(device);
|
||||||
|
close_device_window = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ui.add(egui::Label::new("Select a Device Driver"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if close_device_window {
|
||||||
|
self.device_window_open = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,11 +196,13 @@ fn powered_by_egui_and_eframe(ui: &mut egui::Ui) {
|
|||||||
ui.spacing_mut().item_spacing.x = 0.0;
|
ui.spacing_mut().item_spacing.x = 0.0;
|
||||||
ui.label("Powered by ");
|
ui.label("Powered by ");
|
||||||
ui.hyperlink_to("egui", "https://github.com/emilk/egui");
|
ui.hyperlink_to("egui", "https://github.com/emilk/egui");
|
||||||
ui.label(" and ");
|
ui.label(", ");
|
||||||
ui.hyperlink_to(
|
ui.hyperlink_to(
|
||||||
"eframe",
|
"eframe",
|
||||||
"https://github.com/emilk/egui/tree/master/crates/eframe",
|
"https://github.com/emilk/egui/tree/master/crates/eframe",
|
||||||
);
|
);
|
||||||
|
ui.label(" and ");
|
||||||
|
ui.hyperlink_to("glow", "https://github.com/grovesNL/glow");
|
||||||
ui.label(".");
|
ui.label(".");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user