mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 19:57:25 +01:00
Update dependencies, use new clone syntax
This commit is contained in:
parent
c70abf9594
commit
36b2f1097e
12 changed files with 603 additions and 490 deletions
|
|
@ -28,24 +28,37 @@ mod imp {
|
|||
self.parent_constructed();
|
||||
|
||||
let obj = self.obj();
|
||||
obj.connect_parent_notify(clone!(@weak obj => move |_: &super::MusicusActivatableRow| {
|
||||
let previous_parent = obj.imp().previous_parent.borrow_mut().take();
|
||||
let previous_signal_handler_id = obj.imp().previous_signal_handler_id.borrow_mut().take();
|
||||
if let (Some(previous_parent), Some(previous_signal_handler_id)) = (previous_parent, previous_signal_handler_id) {
|
||||
previous_parent.disconnect(previous_signal_handler_id);
|
||||
}
|
||||
obj.connect_parent_notify(clone!(
|
||||
#[weak]
|
||||
obj,
|
||||
move |_: &super::MusicusActivatableRow| {
|
||||
let previous_parent = obj.imp().previous_parent.borrow_mut().take();
|
||||
let previous_signal_handler_id =
|
||||
obj.imp().previous_signal_handler_id.borrow_mut().take();
|
||||
if let (Some(previous_parent), Some(previous_signal_handler_id)) =
|
||||
(previous_parent, previous_signal_handler_id)
|
||||
{
|
||||
previous_parent.disconnect(previous_signal_handler_id);
|
||||
}
|
||||
|
||||
if let Some(parent) = obj.parent().and_downcast::<gtk::ListBox>() {
|
||||
let signal_handler_id = parent.connect_row_activated(clone!(@weak obj => move |_: >k::ListBox, row: >k::ListBoxRow| {
|
||||
if *row == obj {
|
||||
obj.activate();
|
||||
}
|
||||
}));
|
||||
if let Some(parent) = obj.parent().and_downcast::<gtk::ListBox>() {
|
||||
let signal_handler_id = parent.connect_row_activated(clone!(
|
||||
#[weak]
|
||||
obj,
|
||||
move |_: >k::ListBox, row: >k::ListBoxRow| {
|
||||
if *row == obj {
|
||||
obj.activate();
|
||||
}
|
||||
}
|
||||
));
|
||||
|
||||
obj.imp().previous_parent.replace(Some(parent));
|
||||
obj.imp().previous_signal_handler_id.replace(Some(signal_handler_id));
|
||||
obj.imp().previous_parent.replace(Some(parent));
|
||||
obj.imp()
|
||||
.previous_signal_handler_id
|
||||
.replace(Some(signal_handler_id));
|
||||
}
|
||||
}
|
||||
}));
|
||||
));
|
||||
}
|
||||
|
||||
fn signals() -> &'static [Signal] {
|
||||
|
|
|
|||
|
|
@ -88,9 +88,13 @@ mod imp {
|
|||
persons_popover.connect_create(move |_| {
|
||||
let editor = MusicusPersonEditor::new(&obj.navigation(), &obj.library(), None);
|
||||
|
||||
editor.connect_created(clone!(@weak obj => move |_, person| {
|
||||
obj.add_composer(person);
|
||||
}));
|
||||
editor.connect_created(clone!(
|
||||
#[weak]
|
||||
obj,
|
||||
move |_, person| {
|
||||
obj.add_composer(person);
|
||||
}
|
||||
));
|
||||
|
||||
obj.navigation().push(&editor);
|
||||
});
|
||||
|
|
@ -114,12 +118,21 @@ mod imp {
|
|||
.css_classes(["flat"])
|
||||
.build();
|
||||
|
||||
remove_button.connect_clicked(
|
||||
clone!(@weak obj, @weak row, @strong instrument => move |_| {
|
||||
remove_button.connect_clicked(clone!(
|
||||
#[weak]
|
||||
obj,
|
||||
#[weak]
|
||||
row,
|
||||
#[strong]
|
||||
instrument,
|
||||
move |_| {
|
||||
obj.imp().instrument_list.remove(&row);
|
||||
obj.imp().instruments.borrow_mut().retain(|i| *i != instrument);
|
||||
}),
|
||||
);
|
||||
obj.imp()
|
||||
.instruments
|
||||
.borrow_mut()
|
||||
.retain(|i| *i != instrument);
|
||||
}
|
||||
));
|
||||
|
||||
row.add_suffix(&remove_button);
|
||||
|
||||
|
|
@ -184,12 +197,18 @@ impl MusicusWorkEditor {
|
|||
.css_classes(["flat"])
|
||||
.build();
|
||||
|
||||
remove_button.connect_clicked(
|
||||
clone!(@weak self as obj, @weak row, @strong part => move |_| {
|
||||
obj.imp().part_list.remove(&row);
|
||||
obj.imp().parts.borrow_mut().retain(|p| *p != part);
|
||||
}),
|
||||
);
|
||||
remove_button.connect_clicked(clone!(
|
||||
#[weak(rename_to = this)]
|
||||
self,
|
||||
#[weak]
|
||||
row,
|
||||
#[strong]
|
||||
part,
|
||||
move |_| {
|
||||
this.imp().part_list.remove(&row);
|
||||
this.imp().parts.borrow_mut().retain(|p| *p != part);
|
||||
}
|
||||
));
|
||||
|
||||
row.add_suffix(&remove_button);
|
||||
|
||||
|
|
@ -210,12 +229,16 @@ impl MusicusWorkEditor {
|
|||
fn add_composer(&self, person: Person) {
|
||||
let role = self.library().composer_default_role().unwrap();
|
||||
let composer = Composer { person, role };
|
||||
let row = MusicusWorkEditorComposerRow::new(&self.library(), composer);
|
||||
let row = MusicusWorkEditorComposerRow::new(&self.navigation(), &self.library(), composer);
|
||||
|
||||
row.connect_remove(clone!(@weak self as obj => move |row| {
|
||||
obj.imp().composer_list.remove(row);
|
||||
obj.imp().composer_rows.borrow_mut().retain(|c| c != row);
|
||||
}));
|
||||
row.connect_remove(clone!(
|
||||
#[weak(rename_to = this)]
|
||||
self,
|
||||
move |row| {
|
||||
this.imp().composer_list.remove(row);
|
||||
this.imp().composer_rows.borrow_mut().retain(|c| c != row);
|
||||
}
|
||||
));
|
||||
|
||||
self.imp()
|
||||
.composer_list
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
use crate::{
|
||||
db::models::{Composer, Role},
|
||||
editor::role_selector_popover::MusicusRoleSelectorPopover,
|
||||
library::MusicusLibrary,
|
||||
};
|
||||
use std::cell::{OnceCell, RefCell};
|
||||
|
||||
use adw::{prelude::*, subclass::prelude::*};
|
||||
use gtk::glib::{self, subclass::Signal, Properties};
|
||||
use gtk::glib::{self, clone, subclass::Signal, Properties};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use std::cell::{OnceCell, RefCell};
|
||||
use crate::{
|
||||
db::models::{Composer, Role},
|
||||
editor::{role_editor::MusicusRoleEditor, role_selector_popover::MusicusRoleSelectorPopover},
|
||||
library::MusicusLibrary,
|
||||
};
|
||||
|
||||
mod imp {
|
||||
use super::*;
|
||||
|
|
@ -17,6 +17,9 @@ mod imp {
|
|||
#[properties(wrapper_type = super::MusicusWorkEditorComposerRow)]
|
||||
#[template(file = "data/ui/work_editor_composer_row.blp")]
|
||||
pub struct MusicusWorkEditorComposerRow {
|
||||
#[property(get, construct_only)]
|
||||
pub navigation: OnceCell<adw::NavigationView>,
|
||||
|
||||
#[property(get, construct_only)]
|
||||
pub library: OnceCell<MusicusLibrary>,
|
||||
|
||||
|
|
@ -67,6 +70,24 @@ mod imp {
|
|||
}
|
||||
});
|
||||
|
||||
let obj = self.obj().to_owned();
|
||||
role_popover.connect_create(move |_| {
|
||||
let editor = MusicusRoleEditor::new(&obj.navigation(), &obj.library(), None);
|
||||
|
||||
editor.connect_created(clone!(
|
||||
#[weak]
|
||||
obj,
|
||||
move |_, role| {
|
||||
if let Some(composer) = &mut *obj.imp().composer.borrow_mut() {
|
||||
obj.imp().role_label.set_label(&role.to_string());
|
||||
composer.role = role;
|
||||
};
|
||||
}
|
||||
));
|
||||
|
||||
obj.navigation().push(&editor);
|
||||
});
|
||||
|
||||
self.role_box.append(&role_popover);
|
||||
self.role_popover.set(role_popover).unwrap();
|
||||
}
|
||||
|
|
@ -85,8 +106,15 @@ glib::wrapper! {
|
|||
|
||||
#[gtk::template_callbacks]
|
||||
impl MusicusWorkEditorComposerRow {
|
||||
pub fn new(library: &MusicusLibrary, composer: Composer) -> Self {
|
||||
let obj: Self = glib::Object::builder().property("library", library).build();
|
||||
pub fn new(
|
||||
navigation: &adw::NavigationView,
|
||||
library: &MusicusLibrary,
|
||||
composer: Composer,
|
||||
) -> Self {
|
||||
let obj: Self = glib::Object::builder()
|
||||
.property("navigation", navigation)
|
||||
.property("library", library)
|
||||
.build();
|
||||
obj.set_composer(composer);
|
||||
obj
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue