mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 11:47:25 +01:00
Add preferences dialog
This commit is contained in:
parent
b8911eafaa
commit
cf96792029
7 changed files with 117 additions and 29 deletions
|
|
@ -314,8 +314,8 @@ impl Backend {
|
|||
receiver.await?
|
||||
}
|
||||
|
||||
pub fn set_music_library_path(&self, path: &str) {
|
||||
self.music_library_path.replace(Some(PathBuf::from(path)));
|
||||
pub fn set_music_library_path(&self, path: PathBuf) {
|
||||
self.music_library_path.replace(Some(path.clone()));
|
||||
}
|
||||
|
||||
pub fn get_music_library_path(&self) -> Option<PathBuf> {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ pub use person_editor::*;
|
|||
pub mod person_selector;
|
||||
pub use person_selector::*;
|
||||
|
||||
pub mod preferences;
|
||||
pub use preferences::*;
|
||||
|
||||
pub mod recording_editor;
|
||||
pub use recording_editor::*;
|
||||
|
||||
|
|
|
|||
43
src/dialogs/preferences.rs
Normal file
43
src/dialogs/preferences.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
use crate::backend::Backend;
|
||||
use glib::clone;
|
||||
use gtk::prelude::*;
|
||||
use gtk_macros::get_widget;
|
||||
use libhandy::prelude::*;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct Preferences {
|
||||
window: gtk::Window,
|
||||
}
|
||||
|
||||
impl Preferences {
|
||||
pub fn new<P: IsA<gtk::Window>>(backend: Rc<Backend>, parent: &P) -> Self {
|
||||
let builder = gtk::Builder::from_resource("/de/johrpan/musicus_editor/ui/preferences.ui");
|
||||
|
||||
get_widget!(builder, gtk::Window, window);
|
||||
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()));
|
||||
}
|
||||
|
||||
select_music_library_path_button.connect_clicked(clone!(@strong window, @strong backend, @strong music_library_path_row => move |_| {
|
||||
let dialog = gtk::FileChooserNative::new(Some("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()));
|
||||
backend.set_music_library_path(path);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
Self { window }
|
||||
}
|
||||
|
||||
pub fn show(&self) {
|
||||
self.window.show();
|
||||
}
|
||||
}
|
||||
|
|
@ -24,10 +24,14 @@ impl Window {
|
|||
|
||||
get_widget!(builder, libhandy::ApplicationWindow, window);
|
||||
get_widget!(builder, libhandy::Leaflet, leaflet);
|
||||
get_widget!(builder, gtk::Button, add_button);
|
||||
get_widget!(builder, gtk::Box, sidebar_box);
|
||||
get_widget!(builder, gtk::Box, empty_screen);
|
||||
|
||||
let backend = Rc::new(Backend::new("test.sqlite", std::env::current_dir().unwrap()));
|
||||
let backend = Rc::new(Backend::new(
|
||||
"test.sqlite",
|
||||
std::env::current_dir().unwrap(),
|
||||
));
|
||||
let poe_list = PoeList::new(backend.clone());
|
||||
let navigator = Navigator::new(&empty_screen);
|
||||
|
||||
|
|
@ -60,6 +64,20 @@ impl Window {
|
|||
.pack_start(&result.poe_list.widget, true, true, 0);
|
||||
result.window.set_application(Some(app));
|
||||
|
||||
add_button.connect_clicked(clone!(@strong result => move |_| {
|
||||
TracksEditor::new(result.backend.clone(), &result.window, clone!(@strong result => move || {
|
||||
result.reload();
|
||||
})).show();
|
||||
}));
|
||||
|
||||
action!(
|
||||
result.window,
|
||||
"preferences",
|
||||
clone!(@strong result => move |_, _| {
|
||||
Preferences::new(result.backend.clone(), &result.window).show();
|
||||
})
|
||||
);
|
||||
|
||||
action!(
|
||||
result.window,
|
||||
"add-person",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue