use errors::*; use glib; use std::cell::Cell; use std::cell::Ref; use std::cell::RefCell; use std::rc::Rc; use std::f64; use alsa_pn::*; #[derive(Clone, Copy, Debug)] pub enum AudioUser { AudioUserUnknown, AudioUserPopup, AudioUserTrayIcon, AudioUserHotkeys, } #[derive(Clone, Copy, Debug)] pub enum AudioSignal { AudioNoCard, AudioCardInitialized, AudioCardCleanedUp, AudioCardDisconnected, AudioCardError, AudioValuesChanged, } #[derive(Clone)] pub struct Handlers { inner: Rc>>>, } impl Handlers { fn new() -> Handlers { return Handlers { inner: Rc::new(RefCell::new(vec![])) }; } fn borrow(&self) -> Ref>> { return self.inner.borrow(); } fn add_handler(&self, cb: Box) { self.inner.borrow_mut().push(cb); } } pub struct Audio { _cannot_construct: (), pub acard: RefCell>, pub last_action_timestamp: Rc>, pub handlers: Handlers, pub scroll_step: Cell, } impl Audio { pub fn new(card_name: Option, elem_name: Option) -> Result