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(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(); }