From 4a0251bcf4d28e77134a66b694e80b0ac6465984 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Sun, 25 Apr 2021 13:43:29 +0200 Subject: [PATCH] Don't allow empty track sets --- musicus/src/import/track_set_editor.rs | 32 ++++++++++++++++++-------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/musicus/src/import/track_set_editor.rs b/musicus/src/import/track_set_editor.rs index 9f0ffc8..a71a5b9 100644 --- a/musicus/src/import/track_set_editor.rs +++ b/musicus/src/import/track_set_editor.rs @@ -78,14 +78,15 @@ impl Screen, TrackSetData> for TrackSetEditor { this.handle.pop(None); })); - this.save_button.connect_clicked(clone!(@weak this => move |_| { - let data = TrackSetData { - recording: this.recording.borrow().clone().unwrap(), - tracks: this.tracks.borrow().clone(), - }; + this.save_button + .connect_clicked(clone!(@weak this => move |_| { + let data = TrackSetData { + recording: this.recording.borrow().clone().unwrap(), + tracks: this.tracks.borrow().clone(), + }; - this.handle.pop(Some(data)); - })); + this.handle.pop(Some(data)); + })); select_recording_button.connect_clicked(clone!(@weak this => move |_| { spawn!(@clone this, async move { @@ -172,6 +173,8 @@ impl Screen, TrackSetData> for TrackSetEditor { row.upcast() })); + this.validate(); + this } } @@ -180,11 +183,14 @@ impl TrackSetEditor { /// Set everything up after selecting a recording. fn recording_selected(&self) { if let Some(recording) = &*self.recording.borrow() { - self.recording_row.set_title(Some(&recording.work.get_title())); - self.recording_row.set_subtitle(Some(&recording.get_performers())); + self.recording_row + .set_title(Some(&recording.work.get_title())); + self.recording_row + .set_subtitle(Some(&recording.get_performers())); self.save_button.set_sensitive(true); } + // This will also call validate(). self.autofill_parts(); } @@ -210,6 +216,13 @@ impl TrackSetEditor { fn update_tracks(&self) { let length = self.tracks.borrow().len(); self.track_list.update(length); + self.validate(); + } + + /// Validate data and allow saving if possible. + fn validate(&self) { + self.save_button + .set_sensitive(self.recording.borrow().is_some() && !self.tracks.borrow().is_empty()); } } @@ -218,4 +231,3 @@ impl Widget for TrackSetEditor { self.widget.clone().upcast() } } -