use gtk; use audio::Audio; use ui_tray_icon::TrayIcon; // TODO: destructors // TODO: glade stuff, config, alsacard pub struct AppS { pub gui: Gui, pub audio: Audio, } impl AppS { pub fn new() -> AppS { let builder_popup_window = gtk::Builder::new_from_string(include_str!("../data/ui/popup-window.glade")); let builder_popup_menu = gtk::Builder::new_from_string(include_str!("../data/ui/popup-menu.glade")); return AppS { gui: Gui::new(builder_popup_window, builder_popup_menu), audio: Audio::new(None, Some(String::from("Master"))) .unwrap(), }; } } pub struct Gui { pub tray_icon: TrayIcon, pub popup_window: PopupWindow, pub popup_menu: PopupMenu, /* prefs_dialog is dynamically created and destroyed */ } impl Gui { pub fn new(builder_popup_window: gtk::Builder, builder_popup_menu: gtk::Builder) -> Gui { return Gui { tray_icon: TrayIcon::new().unwrap(), popup_window: PopupWindow::new(builder_popup_window), popup_menu: PopupMenu::new(builder_popup_menu), }; } } create_builder_item!(PopupWindow, popup_window: gtk::Window, vol_scale_adj: gtk::Adjustment, vol_scale: gtk::Scale, mute_check: gtk::CheckButton); create_builder_item!(PopupMenu, menu_window: gtk::Window, menubar: gtk::MenuBar, menu: gtk::Menu, about_item: gtk::MenuItem, prefs_item: gtk::MenuItem);