diff --git a/data/ui/editor/album.blp b/data/ui/editor/album.blp index 15ca53a..d89d79b 100644 --- a/data/ui/editor/album.blp +++ b/data/ui/editor/album.blp @@ -72,6 +72,10 @@ template $MusicusAlbumEditor: Adw.NavigationPage { title: _("_Create album"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/ensemble.blp b/data/ui/editor/ensemble.blp index 5739963..5f1df80 100644 --- a/data/ui/editor/ensemble.blp +++ b/data/ui/editor/ensemble.blp @@ -42,6 +42,10 @@ template $MusicusEnsembleEditor: Adw.NavigationPage { title: _("_Create ensemble"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/instrument.blp b/data/ui/editor/instrument.blp index b420219..7502cf7 100644 --- a/data/ui/editor/instrument.blp +++ b/data/ui/editor/instrument.blp @@ -42,6 +42,10 @@ template $MusicusInstrumentEditor: Adw.NavigationPage { title: _("_Create instrument"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/person.blp b/data/ui/editor/person.blp index ec4e874..bb87451 100644 --- a/data/ui/editor/person.blp +++ b/data/ui/editor/person.blp @@ -42,6 +42,10 @@ template $MusicusPersonEditor: Adw.NavigationPage { title: _("_Create person"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/program.blp b/data/ui/editor/program.blp index c8077ff..6587ee6 100644 --- a/data/ui/editor/program.blp +++ b/data/ui/editor/program.blp @@ -264,6 +264,10 @@ template $MusicusProgramEditor: Adw.NavigationPage { title: _("_Save program"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/recording.blp b/data/ui/editor/recording.blp index 06df0fa..9c12c4a 100644 --- a/data/ui/editor/recording.blp +++ b/data/ui/editor/recording.blp @@ -131,7 +131,12 @@ template $MusicusRecordingEditor: Adw.NavigationPage { Adw.ButtonRow save_row { title: _("_Create recording"); use-underline: true; + sensitive: false; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/role.blp b/data/ui/editor/role.blp index 0690f1b..fb6d442 100644 --- a/data/ui/editor/role.blp +++ b/data/ui/editor/role.blp @@ -42,6 +42,10 @@ template $MusicusRoleEditor: Adw.NavigationPage { title: _("_Create role"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/tracks.blp b/data/ui/editor/tracks.blp index d466b41..2a8d612 100644 --- a/data/ui/editor/tracks.blp +++ b/data/ui/editor/tracks.blp @@ -89,7 +89,12 @@ template $MusicusTracksEditor: Adw.NavigationPage { Adw.ButtonRow save_row { title: _("_Import tracks"); use-underline: true; + sensitive: false; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/data/ui/editor/work.blp b/data/ui/editor/work.blp index 6c125b6..e245fd9 100644 --- a/data/ui/editor/work.blp +++ b/data/ui/editor/work.blp @@ -126,6 +126,10 @@ template $MusicusWorkEditor: Adw.NavigationPage { title: _("_Create work"); use-underline: true; activated => $save() swapped; + + styles [ + "suggested-action", + ] } } } diff --git a/src/editor/recording.rs b/src/editor/recording.rs index ef5e671..b4e6e45 100644 --- a/src/editor/recording.rs +++ b/src/editor/recording.rs @@ -250,6 +250,7 @@ impl RecordingEditor { .composers_string() .unwrap_or_else(|| gettext("No composers")), ); + self.imp().save_row.set_sensitive(true); self.imp().work.replace(Some(work)); } @@ -344,39 +345,40 @@ impl RecordingEditor { #[template_callback] fn save(&self) { - let library = self.imp().library.get().unwrap(); + if let Some(work) = &*self.imp().work.borrow() { + let library = self.imp().library.get().unwrap(); - // TODO: No work selected? - let work = self.imp().work.borrow().as_ref().unwrap().clone(); - let year = self.imp().year_row.value() as i32; + let work = work.to_owned(); + let year = self.imp().year_row.value() as i32; - let performers = self - .imp() - .performer_rows - .borrow() - .iter() - .map(|p| p.performer()) - .collect::>(); + let performers = self + .imp() + .performer_rows + .borrow() + .iter() + .map(|p| p.performer()) + .collect::>(); - let ensembles = self - .imp() - .ensemble_rows - .borrow() - .iter() - .map(|e| e.ensemble()) - .collect::>(); + let ensembles = self + .imp() + .ensemble_rows + .borrow() + .iter() + .map(|e| e.ensemble()) + .collect::>(); - if let Some(recording_id) = self.imp().recording_id.get() { - library - .update_recording(recording_id, work, Some(year), performers, ensembles) - .unwrap(); - } else { - let recording = library - .create_recording(work, Some(year), performers, ensembles) - .unwrap(); - self.emit_by_name::<()>("created", &[&recording]); + if let Some(recording_id) = self.imp().recording_id.get() { + library + .update_recording(recording_id, work, Some(year), performers, ensembles) + .unwrap(); + } else { + let recording = library + .create_recording(work, Some(year), performers, ensembles) + .unwrap(); + self.emit_by_name::<()>("created", &[&recording]); + } + + self.imp().navigation.get().unwrap().pop(); } - - self.imp().navigation.get().unwrap().pop(); } } diff --git a/src/editor/tracks.rs b/src/editor/tracks.rs index 84d5ece..0a0af51 100644 --- a/src/editor/tracks.rs +++ b/src/editor/tracks.rs @@ -227,6 +227,7 @@ impl TracksEditor { self.imp().tracks_label.set_sensitive(true); self.imp().track_list.set_sensitive(true); + self.imp().save_row.set_sensitive(true); self.imp().recording.replace(Some(recording)); } @@ -304,23 +305,23 @@ impl TracksEditor { #[template_callback] fn save(&self) { - for track in self.imp().removed_tracks.borrow_mut().drain(..) { - self.library().delete_track(&track).unwrap(); - } + if let Some(recording) = &*self.imp().recording.borrow() { + for track in self.imp().removed_tracks.borrow_mut().drain(..) { + self.library().delete_track(&track).unwrap(); + } - for (index, track_row) in self.imp().track_rows.borrow_mut().drain(..).enumerate() { - let track_data = track_row.track_data(); + for (index, track_row) in self.imp().track_rows.borrow_mut().drain(..).enumerate() { + let track_data = track_row.track_data(); - match track_data.location { - TrackLocation::Undefined => { - log::error!("Failed to save track: Undefined track location."); - } - TrackLocation::Library(track) => self - .library() - .update_track(&track.track_id, index as i32, track_data.parts) - .unwrap(), - TrackLocation::System(path) => { - if let Some(recording) = &*self.imp().recording.borrow() { + match track_data.location { + TrackLocation::Undefined => { + log::error!("Failed to save track: Undefined track location."); + } + TrackLocation::Library(track) => self + .library() + .update_track(&track.track_id, index as i32, track_data.parts) + .unwrap(), + TrackLocation::System(path) => { self.library() .import_track( &path, @@ -329,15 +330,13 @@ impl TracksEditor { track_data.parts, ) .unwrap(); - } else { - log::error!("Failed to save track: No recording set."); } } + + self.imp().track_list.remove(&track_row); } - self.imp().track_list.remove(&track_row); + self.navigation().pop(); } - - self.navigation().pop(); } }