Update dependencies, use new clone syntax

This commit is contained in:
Elias Projahn 2024-07-18 15:01:30 +02:00
parent c70abf9594
commit 36b2f1097e
12 changed files with 603 additions and 490 deletions

View file

@ -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 |_: &gtk::ListBox, row: &gtk::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 |_: &gtk::ListBox, row: &gtk::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] {

View file

@ -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

View file

@ -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
}