69 lines
2 KiB
Rust
69 lines
2 KiB
Rust
|
use macroquad::hash;
|
||
|
|
||
|
use macroquad::{ui::root_ui, window::screen_width, prelude::Vec2};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
enum Status{
|
||
|
Open,
|
||
|
Closed
|
||
|
}
|
||
|
|
||
|
pub struct ButtonDropDown{
|
||
|
selected:String,
|
||
|
elements:Vec<String>,
|
||
|
status:Status
|
||
|
}
|
||
|
|
||
|
impl ButtonDropDown{
|
||
|
pub fn new(elements:&Vec<String>) -> Self{
|
||
|
ButtonDropDown{
|
||
|
selected:elements.get(0).unwrap().clone(),
|
||
|
elements:elements.clone(),
|
||
|
status:Status::Closed
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn render(&mut self, location:Vec2) -> String{
|
||
|
let mut algo = "";
|
||
|
|
||
|
match self.status{
|
||
|
|
||
|
Status::Open => {
|
||
|
let size = Vec2::new(250., (self.elements.len() as f32*25.0) + 20.0);
|
||
|
root_ui().window(hash!(), location, size, |ui|{
|
||
|
let mut position = Vec2::new(10.0, 10.);
|
||
|
|
||
|
for i in self.elements.iter(){
|
||
|
let label = format!("{}{}", i[0..1].to_string().to_uppercase(), i[1..i.len()].to_string());
|
||
|
if ui.button(position, label.as_str()){
|
||
|
self.selected = i.clone();
|
||
|
self.status = Status::Closed;
|
||
|
}
|
||
|
position.y += 25.0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
});
|
||
|
}
|
||
|
Status::Closed => {
|
||
|
root_ui().window(hash!(), Vec2::new(screen_width()*0.01, 45.), Vec2::new(300., 50.), |ui|{
|
||
|
let uppercasedSelected = format!("{}{}", self.selected[0..1].to_string().to_uppercase(), self.selected[1..self.selected.len()].to_string());
|
||
|
ui.label(Vec2::new(10.0, 0.0), format!("Curent chosen algorithm: {}", uppercasedSelected).as_str());
|
||
|
if ui.button(Vec2::new(10.0, 20.0), "Open Menu!"){
|
||
|
self.status = Status::Open;
|
||
|
}
|
||
|
if ui.button(Vec2::new(200.0, 20.0), "RUN!"){
|
||
|
algo = self.selected.as_str();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
}
|
||
|
|
||
|
algo.to_string()
|
||
|
}
|
||
|
}
|
||
|
|