pnmixer-rust/src/main.rs

108 lines
3.1 KiB
Rust
Raw Normal View History

2017-06-26 07:08:37 +00:00
extern crate gtk;
extern crate gdk;
2017-06-26 15:56:09 +00:00
extern crate gdk_sys;
2017-06-26 07:08:37 +00:00
extern crate alsa;
// #[macro_use]
// extern crate lazy_static;
// use gdk::EventButton;
// use gdk::EventType;
// use std::ops::Deref;
// use std::boxed::Box;
// use std::rc::Rc;
// use std::sync::Arc;
use gtk::prelude::*;
use alsa::mixer::SelemChannelId::*;
2017-06-26 15:56:09 +00:00
use gdk::EventType;
use gdk_sys::GDK_KEY_Escape;
2017-06-26 07:08:37 +00:00
mod audio;
2017-06-26 15:56:09 +00:00
mod gui;
2017-06-26 07:08:37 +00:00
fn main() {
gtk::init().unwrap();
let tray_icon = gtk::StatusIcon::new_from_icon_name("pnmixer");
let glade_src = include_str!("../data/ui/popup-window-vertical.glade");
let builder_popup = gtk::Builder::new_from_string(glade_src);
2017-06-26 15:56:09 +00:00
{
let popup_window: gtk::Window = builder_popup.get_object("popup_window").unwrap();
let vol_scale: gtk::Scale = builder_popup.get_object("vol_scale").unwrap();
2017-06-26 07:08:37 +00:00
2017-06-26 15:56:09 +00:00
tray_icon.connect_activate(move |_| {
if popup_window.get_visible() {
popup_window.hide();
} else {
2017-06-26 07:08:37 +00:00
popup_window.show_all();
2017-06-26 15:56:09 +00:00
vol_scale.grab_focus();
2017-06-26 07:08:37 +00:00
}
2017-06-26 15:56:09 +00:00
});
}
{
let popup_window: gtk::Window = builder_popup.get_object("popup_window").unwrap();
let vol_scale_adj: gtk::Adjustment = builder_popup.get_object("vol_scale_adj").unwrap();
popup_window.connect_show(move |_| {
let alsa_card = audio::get_default_alsa_card();
let mixer = audio::get_mixer(alsa_card);
let selem = audio::get_selem_by_name(&mixer, String::from("Master")).unwrap();
gui::set_slider(&vol_scale_adj, audio::get_vol(selem).unwrap())
});
}
{
let popup_window: gtk::Window = builder_popup.get_object("popup_window").unwrap();
popup_window.connect_event(move |w, e| {
match gdk::Event::get_event_type(e) {
gdk::EventType::GrabBroken => w.hide(),
gdk::EventType::KeyPress => {
println!("BLAH");
let key: gdk::EventKey = e.clone().downcast().unwrap();
if key.get_keyval() == (GDK_KEY_Escape as u32) {
w.hide();
}
},
gdk::EventType::ButtonPress => {
unsafe {
let device = gtk::functions::get_current_event_device();
let (_, x, y) = gdk::Device::get_window_at_position(device);
};
},
_ => (),
2017-06-26 07:08:37 +00:00
}
2017-06-26 15:56:09 +00:00
return Inhibit(false);
});
}
2017-06-26 07:08:37 +00:00
2017-06-26 15:56:09 +00:00
// let alsa_card = audio::get_default_alsa_card();
// let mixer = audio::get_mixer(alsa_card);
// let elem = audio::get_selem_by_name(&mixer, String::from("Master")).unwrap();
// for s in audio::get_selems(&mixer) {
// println!("Name: {}", s.get_id().get_name().unwrap());
// }
// println!("Range: {:?}", channel.get_playback_volume_range());
// println!("Name: {}", elem.get_id().get_name().unwrap());
// println!("Channel: {}", channel.get_playback_volume(FrontRight).unwrap());
// println!("Volume: {}", audio::get_vol(elem).unwrap());
2017-06-26 07:08:37 +00:00
tray_icon.set_visible(true);
gtk::main();
}
2017-06-26 15:56:09 +00:00