Refresh recording editor

This commit is contained in:
Elias Projahn 2020-12-02 15:54:07 +01:00
parent 0e7a2f1f3d
commit 3339945380
7 changed files with 195 additions and 179 deletions

View file

@ -2,7 +2,7 @@
<!-- Generated with glade 3.38.1 -->
<interface>
<requires lib="gtk+" version="3.22"/>
<requires lib="libhandy" version="0.0"/>
<requires lib="libhandy" version="1.0"/>
<object class="GtkStack" id="widget">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -17,20 +17,32 @@
<property name="can-focus">False</property>
<property name="title" translatable="yes">Recording</property>
<child>
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="yes">Cancel</property>
<object class="GtkButton" id="back_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">go-previous-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="save_button">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">object-select-symbolic</property>
</object>
</child>
<style>
<class name="suggested-action"/>
</style>
@ -52,6 +64,26 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="revealed">False</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="content_area">
<object class="GtkBox">
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
@ -67,6 +99,12 @@
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="show-border">False</property>
<child>
<object class="HdyClamp">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="maximum-size">500</property>
<property name="tightening-threshold">300</property>
<child>
<!-- n-columns=2 n-rows=3 -->
<object class="GtkGrid">
@ -156,6 +194,8 @@
</child>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
@ -166,6 +206,11 @@
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="HdyClamp">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tightening-threshold">300</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -259,6 +304,8 @@
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>

View file

@ -26,7 +26,6 @@ pub struct RecordingEditor {
work: RefCell<Option<Work>>,
performances: RefCell<Vec<Performance>>,
selected_cb: RefCell<Option<Box<dyn Fn(Recording) -> ()>>>,
back_cb: RefCell<Option<Box<dyn Fn() -> ()>>>,
navigator: RefCell<Option<Rc<Navigator>>>,
}
@ -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<F: Fn() -> () + '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<F: Fn(Recording) -> () + 'static>(&self, cb: F) {
self.selected_cb.replace(Some(Box::new(cb)));

View file

@ -14,7 +14,6 @@ use std::rc::Rc;
pub struct EnsembleScreen {
backend: Rc<Backend>,
window: gtk::Window,
ensemble: Ensemble,
widget: gtk::Box,
stack: gtk::Stack,
@ -23,10 +22,7 @@ pub struct EnsembleScreen {
}
impl EnsembleScreen {
pub fn new<W>(backend: Rc<Backend>, window: &W, ensemble: Ensemble) -> Rc<Self>
where
W: IsA<gtk::Window>,
{
pub fn new(backend: Rc<Backend>, ensemble: Ensemble) -> Rc<Self> {
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()));
}
}));

View file

@ -14,7 +14,6 @@ use std::rc::Rc;
pub struct PersonScreen {
backend: Rc<Backend>,
window: gtk::Window,
person: Person,
widget: gtk::Box,
stack: gtk::Stack,
@ -24,10 +23,7 @@ pub struct PersonScreen {
}
impl PersonScreen {
pub fn new<W>(backend: Rc<Backend>, window: &W, person: Person) -> Rc<Self>
where
W: IsA<gtk::Window>,
{
pub fn new(backend: Rc<Backend>, person: Person) -> Rc<Self> {
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()));
}
}));

View file

@ -14,7 +14,6 @@ use std::rc::Rc;
pub struct RecordingScreen {
backend: Rc<Backend>,
window: gtk::Window,
recording: Recording,
widget: gtk::Box,
stack: gtk::Stack,
@ -23,10 +22,7 @@ pub struct RecordingScreen {
}
impl RecordingScreen {
pub fn new<W>(backend: Rc<Backend>, window: &W, recording: Recording) -> Rc<Self>
where
W: IsA<gtk::Window>,
{
pub fn new(backend: Rc<Backend>, recording: Recording) -> Rc<Self> {
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,

View file

@ -14,7 +14,6 @@ use std::rc::Rc;
pub struct WorkScreen {
backend: Rc<Backend>,
window: gtk::Window,
work: Work,
widget: gtk::Box,
stack: gtk::Stack,
@ -23,10 +22,7 @@ pub struct WorkScreen {
}
impl WorkScreen {
pub fn new<W>(backend: Rc<Backend>, window: &W, work: Work) -> Rc<Self>
where
W: IsA<gtk::Window>,
{
pub fn new(backend: Rc<Backend>, work: Work) -> Rc<Self> {
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()));
}
}));

View file

@ -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()));
}
}
}));