lock-free-vumeter/src/gui.rs

53 lines
1019 B
Rust

extern crate gtk;
use gtk::prelude::*;
use gtk::{LevelBar, LevelBarExt, Window, WindowType};
pub struct Gui {
level_bar: gtk::LevelBar,
}
impl Gui {
pub fn new(title: &str) -> Self {
let window = Window::new(WindowType::Toplevel);
window.set_title(title);
window.set_default_size(350, 70);
window.connect_delete_event(|_, _| {
gtk::main_quit();
Inhibit(false)
});
let level_bar = LevelBar::new();
window.add(&level_bar);
window.show_all();
Self {
level_bar: level_bar,
}
}
pub fn set_level(&self, level: f64) {
self.level_bar.set_value(level);
}
}
pub fn add_timeout<F>(interval: u32, mut func: F)
where
F: FnMut() + 'static,
{
gtk::timeout_add(interval, move || {
func();
Continue(true)
});
}
pub fn init() -> Result<(), String> {
gtk::init().map_err(|_| "Failed to initialize GTK")?;
Ok(())
}
pub fn run() {
gtk::main();
}