|
|
@ -11,6 +11,124 @@ use plot::{ |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#[derive(PartialEq, Eq)] |
|
|
|
enum Panel { |
|
|
|
Lines, |
|
|
|
Markers, |
|
|
|
Legend, |
|
|
|
Charts, |
|
|
|
Items, |
|
|
|
Interaction, |
|
|
|
CustomAxes, |
|
|
|
LinkedAxes, |
|
|
|
} |
|
|
|
|
|
|
|
impl Default for Panel { |
|
|
|
fn default() -> Self { |
|
|
|
Self::Lines |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#[derive(PartialEq, Default)] |
|
|
|
pub struct PlotDemo { |
|
|
|
line_demo: LineDemo, |
|
|
|
marker_demo: MarkerDemo, |
|
|
|
legend_demo: LegendDemo, |
|
|
|
charts_demo: ChartsDemo, |
|
|
|
items_demo: ItemsDemo, |
|
|
|
interaction_demo: InteractionDemo, |
|
|
|
custom_axes_demo: CustomAxisDemo, |
|
|
|
linked_axes_demo: LinkedAxisDemo, |
|
|
|
open_panel: Panel, |
|
|
|
} |
|
|
|
|
|
|
|
impl super::Demo for PlotDemo { |
|
|
|
fn name(&self) -> &'static str { |
|
|
|
"🗠 Plot" |
|
|
|
} |
|
|
|
|
|
|
|
fn show(&mut self, ctx: &Context, open: &mut bool) { |
|
|
|
use super::View as _; |
|
|
|
Window::new(self.name()) |
|
|
|
.open(open) |
|
|
|
.default_size(vec2(400.0, 400.0)) |
|
|
|
.vscroll(false) |
|
|
|
.show(ctx, |ui| self.ui(ui)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl super::View for PlotDemo { |
|
|
|
fn ui(&mut self, ui: &mut Ui) { |
|
|
|
ui.horizontal(|ui| { |
|
|
|
egui::reset_button(ui, self); |
|
|
|
ui.collapsing("Instructions", |ui| { |
|
|
|
ui.label("Pan by dragging, or scroll (+ shift = horizontal)."); |
|
|
|
ui.label("Box zooming: Right click to zoom in and zoom out using a selection."); |
|
|
|
if cfg!(target_arch = "wasm32") { |
|
|
|
ui.label("Zoom with ctrl / ⌘ + pointer wheel, or with pinch gesture."); |
|
|
|
} else if cfg!(target_os = "macos") { |
|
|
|
ui.label("Zoom with ctrl / ⌘ + scroll."); |
|
|
|
} else { |
|
|
|
ui.label("Zoom with ctrl + scroll."); |
|
|
|
} |
|
|
|
ui.label("Reset view with double-click."); |
|
|
|
ui.add(crate::egui_github_link_file!()); |
|
|
|
}); |
|
|
|
}); |
|
|
|
ui.separator(); |
|
|
|
ui.horizontal(|ui| { |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Lines, "Lines"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Markers, "Markers"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Legend, "Legend"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Charts, "Charts"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Items, "Items"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Interaction, "Interaction"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::CustomAxes, "Custom Axes"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::LinkedAxes, "Linked Axes"); |
|
|
|
}); |
|
|
|
ui.separator(); |
|
|
|
|
|
|
|
match self.open_panel { |
|
|
|
Panel::Lines => { |
|
|
|
self.line_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Markers => { |
|
|
|
self.marker_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Legend => { |
|
|
|
self.legend_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Charts => { |
|
|
|
self.charts_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Items => { |
|
|
|
self.items_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Interaction => { |
|
|
|
self.interaction_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::CustomAxes => { |
|
|
|
self.custom_axes_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::LinkedAxes => { |
|
|
|
self.linked_axes_demo.ui(ui); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fn is_approx_zero(val: f64) -> bool { |
|
|
|
val.abs() < 1e-6 |
|
|
|
} |
|
|
|
|
|
|
|
fn is_approx_integer(val: f64) -> bool { |
|
|
|
val.fract().abs() < 1e-6 |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#[derive(PartialEq)] |
|
|
|
struct LineDemo { |
|
|
|
animate: bool, |
|
|
@ -754,7 +872,6 @@ impl ChartsDemo { |
|
|
|
|
|
|
|
Plot::new("Normal Distribution Demo") |
|
|
|
.legend(Legend::default()) |
|
|
|
.data_aspect(1.0) |
|
|
|
.clamp_grid(true) |
|
|
|
.show(ui, |plot_ui| plot_ui.bar_chart(chart)) |
|
|
|
.response |
|
|
@ -865,121 +982,3 @@ impl ChartsDemo { |
|
|
|
.response |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#[derive(PartialEq, Eq)] |
|
|
|
enum Panel { |
|
|
|
Lines, |
|
|
|
Markers, |
|
|
|
Legend, |
|
|
|
Charts, |
|
|
|
Items, |
|
|
|
Interaction, |
|
|
|
CustomAxes, |
|
|
|
LinkedAxes, |
|
|
|
} |
|
|
|
|
|
|
|
impl Default for Panel { |
|
|
|
fn default() -> Self { |
|
|
|
Self::Lines |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#[derive(PartialEq, Default)] |
|
|
|
pub struct PlotDemo { |
|
|
|
line_demo: LineDemo, |
|
|
|
marker_demo: MarkerDemo, |
|
|
|
legend_demo: LegendDemo, |
|
|
|
charts_demo: ChartsDemo, |
|
|
|
items_demo: ItemsDemo, |
|
|
|
interaction_demo: InteractionDemo, |
|
|
|
custom_axes_demo: CustomAxisDemo, |
|
|
|
linked_axes_demo: LinkedAxisDemo, |
|
|
|
open_panel: Panel, |
|
|
|
} |
|
|
|
|
|
|
|
impl super::Demo for PlotDemo { |
|
|
|
fn name(&self) -> &'static str { |
|
|
|
"🗠 Plot" |
|
|
|
} |
|
|
|
|
|
|
|
fn show(&mut self, ctx: &Context, open: &mut bool) { |
|
|
|
use super::View as _; |
|
|
|
Window::new(self.name()) |
|
|
|
.open(open) |
|
|
|
.default_size(vec2(400.0, 400.0)) |
|
|
|
.vscroll(false) |
|
|
|
.show(ctx, |ui| self.ui(ui)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl super::View for PlotDemo { |
|
|
|
fn ui(&mut self, ui: &mut Ui) { |
|
|
|
ui.horizontal(|ui| { |
|
|
|
egui::reset_button(ui, self); |
|
|
|
ui.collapsing("Instructions", |ui| { |
|
|
|
ui.label("Pan by dragging, or scroll (+ shift = horizontal)."); |
|
|
|
ui.label("Box zooming: Right click to zoom in and zoom out using a selection."); |
|
|
|
if cfg!(target_arch = "wasm32") { |
|
|
|
ui.label("Zoom with ctrl / ⌘ + pointer wheel, or with pinch gesture."); |
|
|
|
} else if cfg!(target_os = "macos") { |
|
|
|
ui.label("Zoom with ctrl / ⌘ + scroll."); |
|
|
|
} else { |
|
|
|
ui.label("Zoom with ctrl + scroll."); |
|
|
|
} |
|
|
|
ui.label("Reset view with double-click."); |
|
|
|
ui.add(crate::egui_github_link_file!()); |
|
|
|
}); |
|
|
|
}); |
|
|
|
ui.separator(); |
|
|
|
ui.horizontal(|ui| { |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Lines, "Lines"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Markers, "Markers"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Legend, "Legend"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Charts, "Charts"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Items, "Items"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::Interaction, "Interaction"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::CustomAxes, "Custom Axes"); |
|
|
|
ui.selectable_value(&mut self.open_panel, Panel::LinkedAxes, "Linked Axes"); |
|
|
|
}); |
|
|
|
ui.separator(); |
|
|
|
|
|
|
|
match self.open_panel { |
|
|
|
Panel::Lines => { |
|
|
|
self.line_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Markers => { |
|
|
|
self.marker_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Legend => { |
|
|
|
self.legend_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Charts => { |
|
|
|
self.charts_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Items => { |
|
|
|
self.items_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::Interaction => { |
|
|
|
self.interaction_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::CustomAxes => { |
|
|
|
self.custom_axes_demo.ui(ui); |
|
|
|
} |
|
|
|
Panel::LinkedAxes => { |
|
|
|
self.linked_axes_demo.ui(ui); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fn is_approx_zero(val: f64) -> bool { |
|
|
|
val.abs() < 1e-6 |
|
|
|
} |
|
|
|
|
|
|
|
fn is_approx_integer(val: f64) -> bool { |
|
|
|
val.fract().abs() < 1e-6 |
|
|
|
} |
|
|
|