use app_state::*; use gtk; use prefs::*; use std::cell::RefCell; use std::rc::Rc; use ui_popup_menu::*; use ui_popup_window::*; use ui_prefs_dialog::*; use ui_tray_icon::*; use audio::{AudioUser, AudioSignal}; pub struct Gui { _cant_construct: (), pub tray_icon: TrayIcon, pub popup_window: PopupWindow, pub popup_menu: PopupMenu, /* prefs_dialog is dynamically created and destroyed */ pub prefs_dialog: RefCell>, } impl Gui { pub fn new(builder_popup_window: gtk::Builder, builder_popup_menu: gtk::Builder, prefs: &Prefs) -> Gui { return Gui { _cant_construct: (), tray_icon: TrayIcon::new(prefs).unwrap(), popup_window: PopupWindow::new(builder_popup_window), popup_menu: PopupMenu::new(builder_popup_menu), prefs_dialog: RefCell::new(None), }; } } pub fn init(appstate: Rc) { { let apps = appstate.clone(); appstate.audio.connect_handler( Box::new(move |s, u| match (s, u) { (AudioSignal::ValuesChanged, AudioUser::Unknown) => { debug!("Appstate references: {}!", Rc::strong_count(&apps)); } _ => debug!("Nix"), }), ); } init_tray_icon(appstate.clone()); init_popup_window(appstate.clone()); init_popup_menu(appstate.clone()); init_prefs_callback(appstate.clone()); }