2020-10-31 23:48:11 +01:00
|
|
|
use crate::backend::Backend;
|
2020-11-02 00:52:04 +01:00
|
|
|
use gettextrs::gettext;
|
2020-10-31 23:48:11 +01:00
|
|
|
use glib::clone;
|
|
|
|
|
use gtk::prelude::*;
|
|
|
|
|
use gtk_macros::get_widget;
|
|
|
|
|
use libhandy::prelude::*;
|
|
|
|
|
use std::rc::Rc;
|
|
|
|
|
|
|
|
|
|
pub struct Preferences {
|
2020-11-03 17:53:13 +01:00
|
|
|
window: libhandy::Window,
|
2020-10-31 23:48:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Preferences {
|
|
|
|
|
pub fn new<P: IsA<gtk::Window>>(backend: Rc<Backend>, parent: &P) -> Self {
|
2020-11-01 12:49:10 +01:00
|
|
|
let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/preferences.ui");
|
2020-10-31 23:48:11 +01:00
|
|
|
|
2020-11-03 17:53:13 +01:00
|
|
|
get_widget!(builder, libhandy::Window, window);
|
2020-10-31 23:48:11 +01:00
|
|
|
get_widget!(builder, libhandy::ActionRow, music_library_path_row);
|
|
|
|
|
get_widget!(builder, gtk::Button, select_music_library_path_button);
|
|
|
|
|
|
|
|
|
|
window.set_transient_for(Some(parent));
|
|
|
|
|
|
|
|
|
|
if let Some(path) = backend.get_music_library_path() {
|
|
|
|
|
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-02 00:52:04 +01:00
|
|
|
select_music_library_path_button.connect_clicked(
|
|
|
|
|
clone!(@strong window, @strong backend, @strong music_library_path_row => move |_| {
|
|
|
|
|
let dialog = gtk::FileChooserNative::new(
|
|
|
|
|
Some(&gettext("Select music library folder")),
|
|
|
|
|
Some(&window), gtk::FileChooserAction::SelectFolder,None, None);
|
|
|
|
|
|
|
|
|
|
if let gtk::ResponseType::Accept = dialog.run() {
|
|
|
|
|
if let Some(path) = dialog.get_filename() {
|
|
|
|
|
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
|
|
|
|
|
|
|
|
|
|
let context = glib::MainContext::default();
|
|
|
|
|
let backend = backend.clone();
|
|
|
|
|
context.spawn_local(async move {
|
|
|
|
|
backend.set_music_library_path(path).await.unwrap();
|
|
|
|
|
});
|
|
|
|
|
}
|
2020-10-31 23:48:11 +01:00
|
|
|
}
|
2020-11-02 00:52:04 +01:00
|
|
|
}),
|
|
|
|
|
);
|
2020-10-31 23:48:11 +01:00
|
|
|
|
|
|
|
|
Self { window }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn show(&self) {
|
|
|
|
|
self.window.show();
|
|
|
|
|
}
|
|
|
|
|
}
|