mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 19:57:25 +01:00
Refresh recording editor
This commit is contained in:
parent
0e7a2f1f3d
commit
3339945380
7 changed files with 195 additions and 179 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue