use alsa_card::*; use errors::*; use glib; use std::cell::Cell; use std::cell::Ref; use std::cell::RefCell; use std::f64; use std::rc::Rc; use support_audio::*; #[derive(Clone, Copy, Debug)] pub enum VolLevel { Muted, Low, Medium, High, Off, } #[derive(Clone, Copy, Debug)] pub enum AudioUser { Unknown, Popup, TrayIcon, Hotkeys, PrefsWindow, } #[derive(Clone, Copy, Debug)] pub enum AudioSignal { NoCard, CardInitialized, CardCleanedUp, CardDisconnected, CardError, ValuesChanged, } #[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