From 333994538072493867d18f6349662fec17f08a7b Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Wed, 2 Dec 2020 15:54:07 +0100 Subject: [PATCH] Refresh recording editor --- musicus/res/ui/recording_editor.ui | 319 ++++++++++++++---------- musicus/src/editors/recording.rs | 15 +- musicus/src/screens/ensemble_screen.rs | 9 +- musicus/src/screens/person_screen.rs | 11 +- musicus/src/screens/recording_screen.rs | 7 +- musicus/src/screens/work_screen.rs | 9 +- musicus/src/window.rs | 4 +- 7 files changed, 195 insertions(+), 179 deletions(-) diff --git a/musicus/res/ui/recording_editor.ui b/musicus/res/ui/recording_editor.ui index 83f93a8..100f6af 100644 --- a/musicus/res/ui/recording_editor.ui +++ b/musicus/res/ui/recording_editor.ui @@ -2,7 +2,7 @@ - + True False @@ -17,20 +17,32 @@ False Recording - - Cancel + True True True + + + True + False + go-previous-symbolic + + - Save True False True True + + + True + False + object-select-symbolic + + @@ -52,6 +64,26 @@ True False False + + + False + + + False + False + 0 + + + + + False + + + False + False + 0 + + @@ -68,91 +100,99 @@ True False - - + True False - 18 - 12 - 6 + 500 + 300 - + + True False - end - Comment - - - 0 - 1 - - - - - True - True - True - True + 18 + 12 + 6 - + True False - start - Select … - end + end + Comment + + 0 + 1 + + + + + True + True + True + True + + + True + False + start + Select … + end + + + + + 1 + 0 + + + + + True + True + + + 1 + 1 + + + + + True + False + end + Work + + + 0 + 0 + + + + + True + False + end + Publish + + + 0 + 2 + + + + + True + True + start + True + + + 1 + 2 + - - 1 - 0 - - - - - True - True - - - 1 - 1 - - - - - True - False - end - Work - - - 0 - 0 - - - - - True - False - end - Publish - - - 0 - 2 - - - - - True - True - start - True - - - 1 - 2 - @@ -167,63 +207,94 @@ - + True False - 18 - 6 - - - True - True - in - - - - - - True - True - 0 - - + 300 True False - 0 - vertical + 18 6 - + True True - True + in - - True - False - list-add-symbolic - + - False + True True 0 - + True - True - True + False + 0 + vertical + 6 - + True - False - edit-symbolic + True + True + + + True + False + list-add-symbolic + + + + False + True + 0 + + + + + True + True + True + + + True + False + edit-symbolic + + + + + False + True + 1 + + + + + True + True + True + + + True + False + list-remove-symbolic + + + + + False + True + 2 + @@ -232,31 +303,7 @@ 1 - - - True - True - True - - - True - False - list-remove-symbolic - - - - - False - True - 2 - - - - False - True - 1 - diff --git a/musicus/src/editors/recording.rs b/musicus/src/editors/recording.rs index 7e7c912..a93bb93 100644 --- a/musicus/src/editors/recording.rs +++ b/musicus/src/editors/recording.rs @@ -26,7 +26,6 @@ pub struct RecordingEditor { work: RefCell>, performances: RefCell>, selected_cb: RefCell ()>>>, - back_cb: RefCell ()>>>, navigator: RefCell>>, } @@ -38,7 +37,7 @@ impl RecordingEditor { let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_editor.ui"); get_widget!(builder, gtk::Stack, widget); - get_widget!(builder, gtk::Button, cancel_button); + get_widget!(builder, gtk::Button, back_button); get_widget!(builder, gtk::Button, save_button); get_widget!(builder, gtk::InfoBar, info_bar); get_widget!(builder, gtk::Button, work_button); @@ -74,17 +73,12 @@ impl RecordingEditor { work: RefCell::new(work), performances: RefCell::new(performances), selected_cb: RefCell::new(None), - back_cb: RefCell::new(None), navigator: RefCell::new(None), }); // Connect signals and callbacks - cancel_button.connect_clicked(clone!(@strong this => move |_| { - if let Some(cb) = &*this.back_cb.borrow() { - cb(); - } - + back_button.connect_clicked(clone!(@strong this => move |_| { let navigator = this.navigator.borrow().clone(); if let Some(navigator) = navigator { navigator.clone().pop(); @@ -216,11 +210,6 @@ impl RecordingEditor { this } - /// Set the closure to be called if the editor is canceled. - pub fn set_back_cb () + 'static>(&self, cb: F) { - self.back_cb.replace(Some(Box::new(cb))); - } - /// Set the closure to be called if the recording was created. pub fn set_selected_cb () + 'static>(&self, cb: F) { self.selected_cb.replace(Some(Box::new(cb))); diff --git a/musicus/src/screens/ensemble_screen.rs b/musicus/src/screens/ensemble_screen.rs index 9809e88..6a4a738 100644 --- a/musicus/src/screens/ensemble_screen.rs +++ b/musicus/src/screens/ensemble_screen.rs @@ -14,7 +14,6 @@ use std::rc::Rc; pub struct EnsembleScreen { backend: Rc, - window: gtk::Window, ensemble: Ensemble, widget: gtk::Box, stack: gtk::Stack, @@ -23,10 +22,7 @@ pub struct EnsembleScreen { } impl EnsembleScreen { - pub fn new(backend: Rc, window: &W, ensemble: Ensemble) -> Rc - where - W: IsA, - { + pub fn new(backend: Rc, ensemble: Ensemble) -> Rc { let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/ensemble_screen.ui"); get_widget!(builder, gtk::Box, widget); @@ -80,7 +76,6 @@ impl EnsembleScreen { let result = Rc::new(Self { backend, - window: window.clone().upcast(), ensemble, widget, stack, @@ -104,7 +99,7 @@ impl EnsembleScreen { .set_selected(clone!(@strong result => move |recording| { let navigator = result.navigator.borrow().clone(); if let Some(navigator) = navigator { - navigator.push(RecordingScreen::new(result.backend.clone(), &result.window, recording.clone())); + navigator.push(RecordingScreen::new(result.backend.clone(), recording.clone())); } })); diff --git a/musicus/src/screens/person_screen.rs b/musicus/src/screens/person_screen.rs index 65dcf9b..475e36f 100644 --- a/musicus/src/screens/person_screen.rs +++ b/musicus/src/screens/person_screen.rs @@ -14,7 +14,6 @@ use std::rc::Rc; pub struct PersonScreen { backend: Rc, - window: gtk::Window, person: Person, widget: gtk::Box, stack: gtk::Stack, @@ -24,10 +23,7 @@ pub struct PersonScreen { } impl PersonScreen { - pub fn new(backend: Rc, window: &W, person: Person) -> Rc - where - W: IsA, - { + pub fn new(backend: Rc, person: Person) -> Rc { let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/person_screen.ui"); get_widget!(builder, gtk::Box, widget); @@ -103,7 +99,6 @@ impl PersonScreen { let result = Rc::new(Self { backend, - window: window.clone().upcast(), person, widget, stack, @@ -130,7 +125,7 @@ impl PersonScreen { result.recording_list.clear_selection(); let navigator = result.navigator.borrow().clone(); if let Some(navigator) = navigator { - navigator.push(WorkScreen::new(result.backend.clone(), &result.window, work.clone())); + navigator.push(WorkScreen::new(result.backend.clone(), work.clone())); } })); @@ -140,7 +135,7 @@ impl PersonScreen { result.work_list.clear_selection(); let navigator = result.navigator.borrow().clone(); if let Some(navigator) = navigator { - navigator.push(RecordingScreen::new(result.backend.clone(), &result.window, recording.clone())); + navigator.push(RecordingScreen::new(result.backend.clone(), recording.clone())); } })); diff --git a/musicus/src/screens/recording_screen.rs b/musicus/src/screens/recording_screen.rs index 9ab007d..fa0789e 100644 --- a/musicus/src/screens/recording_screen.rs +++ b/musicus/src/screens/recording_screen.rs @@ -14,7 +14,6 @@ use std::rc::Rc; pub struct RecordingScreen { backend: Rc, - window: gtk::Window, recording: Recording, widget: gtk::Box, stack: gtk::Stack, @@ -23,10 +22,7 @@ pub struct RecordingScreen { } impl RecordingScreen { - pub fn new(backend: Rc, window: &W, recording: Recording) -> Rc - where - W: IsA, - { + pub fn new(backend: Rc, recording: Recording) -> Rc { let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_screen.ui"); get_widget!(builder, gtk::Box, widget); @@ -57,7 +53,6 @@ impl RecordingScreen { let result = Rc::new(Self { backend, - window: window.clone().upcast(), recording, widget, stack, diff --git a/musicus/src/screens/work_screen.rs b/musicus/src/screens/work_screen.rs index 6f3633b..a84cef2 100644 --- a/musicus/src/screens/work_screen.rs +++ b/musicus/src/screens/work_screen.rs @@ -14,7 +14,6 @@ use std::rc::Rc; pub struct WorkScreen { backend: Rc, - window: gtk::Window, work: Work, widget: gtk::Box, stack: gtk::Stack, @@ -23,10 +22,7 @@ pub struct WorkScreen { } impl WorkScreen { - pub fn new(backend: Rc, window: &W, work: Work) -> Rc - where - W: IsA, - { + pub fn new(backend: Rc, work: Work) -> Rc { let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/work_screen.ui"); get_widget!(builder, gtk::Box, widget); @@ -79,7 +75,6 @@ impl WorkScreen { let result = Rc::new(Self { backend, - window: window.clone().upcast(), work, widget, stack, @@ -103,7 +98,7 @@ impl WorkScreen { .set_selected(clone!(@strong result => move |recording| { let navigator = result.navigator.borrow().clone(); if let Some(navigator) = navigator { - navigator.push(RecordingScreen::new(result.backend.clone(), &result.window, recording.clone())); + navigator.push(RecordingScreen::new(result.backend.clone(), recording.clone())); } })); diff --git a/musicus/src/window.rs b/musicus/src/window.rs index d932bc5..066cab4 100644 --- a/musicus/src/window.rs +++ b/musicus/src/window.rs @@ -163,10 +163,10 @@ impl Window { result.leaflet.set_visible_child(&result.navigator.widget); match poe { PersonOrEnsemble::Person(person) => { - result.navigator.clone().replace(PersonScreen::new(result.backend.clone(), &result.window, person.clone())); + result.navigator.clone().replace(PersonScreen::new(result.backend.clone(), person.clone())); } PersonOrEnsemble::Ensemble(ensemble) => { - result.navigator.clone().replace(EnsembleScreen::new(result.backend.clone(), &result.window, ensemble.clone())); + result.navigator.clone().replace(EnsembleScreen::new(result.backend.clone(), ensemble.clone())); } } }));