Common slider functions
This commit is contained in:
parent
ed1883773c
commit
467f3193b2
@ -2,12 +2,11 @@
|
||||
|
||||
mod algo;
|
||||
|
||||
use bgtu_ai_utility::labeled_slider;
|
||||
use eframe::egui;
|
||||
use eframe::egui::{CornerRadius, Frame, Ui};
|
||||
use eframe::emath::Numeric;
|
||||
use eframe::egui::{CornerRadius, Frame};
|
||||
use eframe::epaint::{Color32, Pos2, Rect};
|
||||
use rand::SeedableRng;
|
||||
use std::ops::RangeInclusive;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
fn main() -> eframe::Result {
|
||||
@ -45,32 +44,14 @@ impl Default for MyApp {
|
||||
}
|
||||
}
|
||||
|
||||
fn _slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
name: &str,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) {
|
||||
let label = ui.label(name);
|
||||
|
||||
ui.scope(|ui| {
|
||||
ui.spacing_mut().slider_width = ui.available_width()
|
||||
- ui.spacing().interact_size.x
|
||||
- ui.spacing().button_padding.x * 2.0;
|
||||
ui.add(egui::Slider::new(storage, range).step_by(step))
|
||||
.labelled_by(label.id);
|
||||
});
|
||||
}
|
||||
|
||||
impl eframe::App for MyApp {
|
||||
fn update(&mut self, ui: &eframe::egui::Context, _frame: &mut eframe::Frame) {
|
||||
egui::CentralPanel::default().show(ui, |ui| {
|
||||
ui.add_enabled_ui(matches!(self.result, None), |ui| {
|
||||
_slider(ui, "Board size:", &mut self.boardSize, 2..=50, 1.0);
|
||||
labeled_slider(ui, "Board size:", &mut self.boardSize, 2..=50, 1.0);
|
||||
ui.label("");
|
||||
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Initial temperature:",
|
||||
&mut self.simulationConfig.initialTemperature,
|
||||
@ -78,15 +59,15 @@ impl eframe::App for MyApp {
|
||||
0.01,
|
||||
);
|
||||
ui.label("");
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Target Temperature:",
|
||||
&mut self.simulationConfig.targetTemperature,
|
||||
0.0..=99.98,
|
||||
0.0..=self.simulationConfig.initialTemperature - 0.1,
|
||||
0.01,
|
||||
);
|
||||
ui.label("");
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Cooldown coefficient:",
|
||||
&mut self.simulationConfig.cooldownCoefficient,
|
||||
@ -95,7 +76,7 @@ impl eframe::App for MyApp {
|
||||
);
|
||||
ui.label("");
|
||||
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Iterations per age:",
|
||||
&mut self.simulationConfig.iterationsPerAge,
|
||||
|
||||
@ -8,3 +8,4 @@ workspace = true
|
||||
[dependencies]
|
||||
eframe = { workspace = true }
|
||||
egui_extras = { workspace = true }
|
||||
bgtu-ai-utility = {workspace = true}
|
||||
|
||||
@ -3,11 +3,9 @@
|
||||
mod algo;
|
||||
|
||||
use crate::algo::BitVector;
|
||||
use bgtu_ai_utility::labeled_slider;
|
||||
use eframe::egui;
|
||||
use eframe::egui::Ui;
|
||||
use eframe::emath::Numeric;
|
||||
use egui_extras::{Column, TableBuilder};
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
fn main() -> eframe::Result {
|
||||
let options = eframe::NativeOptions {
|
||||
@ -53,24 +51,6 @@ impl Default for MyApp {
|
||||
}
|
||||
}
|
||||
|
||||
fn _slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
name: &str,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) {
|
||||
let label = ui.label(name);
|
||||
|
||||
ui.scope(|ui| {
|
||||
ui.spacing_mut().slider_width = ui.available_width()
|
||||
- ui.spacing().interact_size.x
|
||||
- ui.spacing().button_padding.x * 2.0;
|
||||
ui.add(egui::Slider::new(storage, range).step_by(step))
|
||||
.labelled_by(label.id);
|
||||
});
|
||||
}
|
||||
|
||||
impl eframe::App for MyApp {
|
||||
fn update(&mut self, ui: &eframe::egui::Context, _frame: &mut eframe::Frame) {
|
||||
match self.columnUpdate {
|
||||
@ -115,9 +95,9 @@ impl eframe::App for MyApp {
|
||||
|
||||
egui::CentralPanel::default().show(ui, |ui| {
|
||||
ui.add_enabled_ui(matches!(self.result, None), |ui| {
|
||||
_slider(ui, "beta", &mut self.beta, 1..=10, 1f64);
|
||||
labeled_slider(ui, "beta", &mut self.beta, 1..=10, 1f64);
|
||||
ui.label("");
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"attentiveness",
|
||||
&mut self.attentiveness,
|
||||
|
||||
@ -6,13 +6,12 @@ use crate::algo::{
|
||||
updateState, Ant, AntsSimulationConfig, AntsSimulationState, EdgeExtraData, EdgesVec,
|
||||
VerticesVec,
|
||||
};
|
||||
use eframe::egui;
|
||||
use eframe::egui::{Frame, Ui};
|
||||
use eframe::emath::Numeric;
|
||||
use std::collections::HashSet;
|
||||
use std::ops::RangeInclusive;
|
||||
use bgtu_ai_utility::gui::lengths_table::{draw_lengths_table, UpdatePending};
|
||||
use bgtu_ai_utility::gui::render::render_graph;
|
||||
use bgtu_ai_utility::labeled_slider;
|
||||
use eframe::egui;
|
||||
use eframe::egui::{Frame, Ui};
|
||||
use std::collections::HashSet;
|
||||
|
||||
fn main() -> eframe::Result {
|
||||
let options = eframe::NativeOptions {
|
||||
@ -62,23 +61,6 @@ impl Default for MyApp {
|
||||
}
|
||||
}
|
||||
|
||||
fn _slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
name: &str,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) {
|
||||
let label = ui.label(name);
|
||||
|
||||
ui.scope(|ui| {
|
||||
ui.spacing_mut().slider_width = ui.available_width()
|
||||
- ui.spacing().interact_size.x
|
||||
- ui.spacing().button_padding.x * 2.0;
|
||||
ui.add(egui::Slider::new(storage, range).step_by(step))
|
||||
.labelled_by(label.id);
|
||||
});
|
||||
}
|
||||
|
||||
impl eframe::App for MyApp {
|
||||
fn update(&mut self, ui: &eframe::egui::Context, _frame: &mut eframe::Frame) {
|
||||
@ -145,7 +127,7 @@ impl eframe::App for MyApp {
|
||||
fn edit_panel(data: &mut MyApp, ui: &mut Ui) {
|
||||
let mut run: bool = false;
|
||||
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Ferment weight",
|
||||
&mut data.config.ferment_weight,
|
||||
@ -153,7 +135,7 @@ fn edit_panel(data: &mut MyApp, ui: &mut Ui) {
|
||||
0.001,
|
||||
);
|
||||
ui.label("");
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Heuristic coefficient",
|
||||
&mut data.config.heuristic_coefficient,
|
||||
@ -161,11 +143,11 @@ fn edit_panel(data: &mut MyApp, ui: &mut Ui) {
|
||||
0.001,
|
||||
);
|
||||
ui.label("");
|
||||
_slider(ui, "Q", &mut data.config.q, 0.0..=1.0, 0.001);
|
||||
labeled_slider(ui, "Q", &mut data.config.q, 0.0..=1.0, 0.001);
|
||||
ui.label("");
|
||||
_slider(ui, "r", &mut data.config.r, 0.0..=1.0, 0.001);
|
||||
labeled_slider(ui, "r", &mut data.config.r, 0.0..=1.0, 0.001);
|
||||
ui.label("");
|
||||
_slider(
|
||||
labeled_slider(
|
||||
ui,
|
||||
"Ants per vertex",
|
||||
&mut data.ants_per_vertex,
|
||||
|
||||
@ -9,3 +9,4 @@ workspace = true
|
||||
rand = { workspace = true }
|
||||
eframe = { workspace = true }
|
||||
egui_extras = { workspace = true }
|
||||
bgtu-ai-utility = {workspace = true}
|
||||
|
||||
@ -4,13 +4,12 @@
|
||||
|
||||
mod algo;
|
||||
|
||||
use crate::algo::{ComparationOperatorsModel, gen_images};
|
||||
use crate::algo::{gen_images, ComparationOperatorsModel};
|
||||
use bgtu_ai_utility::labeled_slider;
|
||||
use eframe::egui;
|
||||
use eframe::egui::{Ui, Widget};
|
||||
use eframe::emath::Numeric;
|
||||
use eframe::egui::Widget;
|
||||
use egui_extras::{Column, TableBuilder};
|
||||
use std::cmp::min;
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
fn main() -> eframe::Result {
|
||||
let options = eframe::NativeOptions {
|
||||
@ -58,36 +57,19 @@ impl Default for MyApp {
|
||||
}
|
||||
}
|
||||
|
||||
fn _slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
name: &str,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) {
|
||||
let label = ui.label(name);
|
||||
|
||||
ui.scope(|ui| {
|
||||
ui.spacing_mut().slider_width = ui.available_width()
|
||||
- ui.spacing().interact_size.x
|
||||
- ui.spacing().button_padding.x * 2.0;
|
||||
ui.add(egui::Slider::new(storage, range).step_by(step))
|
||||
.labelled_by(label.id);
|
||||
});
|
||||
}
|
||||
|
||||
impl eframe::App for MyApp {
|
||||
fn update(&mut self, ui: &eframe::egui::Context, _frame: &mut eframe::Frame) {
|
||||
egui::CentralPanel::default().show(ui, |ui| {
|
||||
ui.add_enabled_ui(matches!(self.training, TrainingState::NoTrain), |ui| {
|
||||
_slider(ui, "Hidden layer size", &mut self.hidden_layer_size, 1..=49, 1f64);
|
||||
labeled_slider(ui, "Hidden layer size", &mut self.hidden_layer_size, 1..=49, 1f64);
|
||||
if (self.hidden_layer_size != self.model.hidden_layer_size()) {
|
||||
self.model.resize_hidden_layer(self.hidden_layer_size);
|
||||
}
|
||||
ui.label("");
|
||||
_slider(ui, "η", &mut self.n, 0.0..=1.0, 0.001);
|
||||
labeled_slider(ui, "η", &mut self.n, 0.0..=1.0, 0.001);
|
||||
ui.label("");
|
||||
_slider(ui, "Epochs count", &mut self.epochs_count, 1..=500, 1f64);
|
||||
labeled_slider(ui, "Epochs count", &mut self.epochs_count, 1..=500, 1f64);
|
||||
ui.label("");
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use crate::graph::{EdgesVec, VerticesVec};
|
||||
use eframe::egui;
|
||||
use crate::slider;
|
||||
use eframe::egui::{ScrollArea, Ui};
|
||||
use egui_extras::{Column, TableBuilder};
|
||||
use std::ptr::NonNull;
|
||||
@ -52,7 +52,8 @@ pub fn draw_lengths_table<D>(
|
||||
});
|
||||
});
|
||||
|
||||
let mut local_edges = Vec::<(usize, NonNull<f64>)>::with_capacity(v.len());
|
||||
let mut local_edges =
|
||||
Vec::<(usize, NonNull<f64>)>::with_capacity(v.len());
|
||||
for ei in v.iter() {
|
||||
let e = &mut edges[*ei];
|
||||
let p = (e.another(vi), &mut e.length);
|
||||
@ -67,10 +68,7 @@ pub fn draw_lengths_table<D>(
|
||||
ci += 1
|
||||
}
|
||||
row.col(|ui| {
|
||||
ui.add(
|
||||
egui::Slider::new(unsafe { l.as_mut() }, 0.0..=10.0)
|
||||
.step_by(0.1),
|
||||
);
|
||||
slider(ui, unsafe { l.as_mut() }, 0.0..=10.0, 0.1);
|
||||
});
|
||||
ci += 1;
|
||||
}
|
||||
|
||||
@ -1,2 +1,5 @@
|
||||
pub mod graph;
|
||||
pub mod gui;
|
||||
pub mod gui;
|
||||
mod slider;
|
||||
|
||||
pub use slider::{slider, labeled_slider};
|
||||
32
utility/src/slider.rs
Normal file
32
utility/src/slider.rs
Normal file
@ -0,0 +1,32 @@
|
||||
use eframe::egui;
|
||||
use eframe::egui::{Response, Ui};
|
||||
use eframe::emath::Numeric;
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
pub fn slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) -> Response {
|
||||
let scope = |ui: &mut Ui| {
|
||||
let spacing = ui.spacing();
|
||||
ui.spacing_mut().slider_width =
|
||||
ui.available_width() - spacing.interact_size.x - spacing.button_padding.x * 2.0;
|
||||
return ui.add(egui::Slider::new(storage, range).step_by(step));
|
||||
};
|
||||
|
||||
return ui.scope(scope).inner;
|
||||
}
|
||||
|
||||
pub fn labeled_slider<T: Numeric>(
|
||||
ui: &mut Ui,
|
||||
name: &str,
|
||||
storage: &mut T,
|
||||
range: RangeInclusive<T>,
|
||||
step: f64,
|
||||
) -> Response {
|
||||
let label = ui.label(name);
|
||||
|
||||
return slider(ui, storage, range, step).labelled_by(label.id);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user