pnmixer-rust/src/app_state.rs
2017-07-04 21:15:11 +02:00

72 lines
1.5 KiB
Rust

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