Make sheet edit dialog openable again

This commit is contained in:
Julian Mutter 2024-05-26 08:50:29 +02:00
parent 9692b1a825
commit ee8a887caa
2 changed files with 63 additions and 93 deletions

View File

@ -29,7 +29,7 @@ pub struct AppModel {
sheets_listing: Controller<SheetListingModel>, sheets_listing: Controller<SheetListingModel>,
edit_mode: bool, edit_mode: bool,
scroll_adjustment: Adjustment, scroll_adjustment: Adjustment,
sheet_edit_dialog: Controller<SheetEditDialogModel>, sheet_edit_dialog: Option<Controller<SheetEditDialogModel>>,
} }
#[derive(Debug)] #[derive(Debug)]
@ -132,11 +132,6 @@ impl AsyncComponent for AppModel {
}, },
); );
let sheet_edit_dialog = SheetEditDialogModel::builder()
.transient_for(&window)
.launch(())
.forward(sender.input_sender(), |_| todo!());
let model = AppModel { let model = AppModel {
database: Arc::new(init_data.database), database: Arc::new(init_data.database),
directory: Arc::new(init_data.directory), directory: Arc::new(init_data.directory),
@ -144,7 +139,7 @@ impl AsyncComponent for AppModel {
sheets_listing, sheets_listing,
edit_mode: false, edit_mode: false,
scroll_adjustment: Adjustment::builder().build(), scroll_adjustment: Adjustment::builder().build(),
sheet_edit_dialog, sheet_edit_dialog: None,
}; };
let widgets = view_output!(); let widgets = view_output!();
@ -156,7 +151,7 @@ impl AsyncComponent for AppModel {
&mut self, &mut self,
message: Self::Input, message: Self::Input,
sender: AsyncComponentSender<Self>, sender: AsyncComponentSender<Self>,
_root: &Self::Root, root: &Self::Root,
) { ) {
match message { match message {
AppInput::SearchStarted(query) => { AppInput::SearchStarted(query) => {
@ -165,10 +160,12 @@ impl AsyncComponent for AppModel {
} }
AppInput::SheetPressed(sheet) => { AppInput::SheetPressed(sheet) => {
if self.edit_mode { if self.edit_mode {
self.sheet_edit_dialog self.sheet_edit_dialog = Some(
.sender() SheetEditDialogModel::builder()
.send(SheetEditDialogInput::Show(sheet)) .transient_for(&root)
.unwrap(); .launch(sheet)
.forward(sender.input_sender(), |_| todo!()),
);
} else { } else {
sheet.open_file(); sheet.open_file();
let mut sheet = sheet; let mut sheet = sheet;

View File

@ -10,11 +10,12 @@ pub struct SheetEditDialogModel {
sheet: Option<Sheet>, sheet: Option<Sheet>,
sheet_name: String, sheet_name: String,
sheet_composer: String, sheet_composer: String,
is_book: bool,
book_sheets: Vec<(String, String, i64)>,
} }
#[derive(Debug)] #[derive(Debug)]
pub enum SheetEditDialogInput { pub enum SheetEditDialogInput {
Show(Sheet),
Accept, Accept,
Cancel, Cancel,
} }
@ -26,26 +27,16 @@ pub enum SheetEditDialogOutput {
#[relm4::component(pub)] #[relm4::component(pub)]
impl SimpleComponent for SheetEditDialogModel { impl SimpleComponent for SheetEditDialogModel {
type Init = (); type Init = Sheet;
type Input = SheetEditDialogInput; type Input = SheetEditDialogInput;
type Output = SheetEditDialogOutput; type Output = SheetEditDialogOutput;
view! { view! {
gtk::Window { gtk::Window {
set_modal: true,
#[watch] #[watch]
set_visible: !model.hidden, set_visible: !model.hidden,
set_modal: true,
set_title: Some("Edit sheet"), set_title: Some("Edit sheet"),
// set_secondary_text: Some("All unsaved changes will be lost"),
// add_button: ("Confirm", gtk::ResponseType::Accept),
// add_button: ("Cancel", gtk::ResponseType::Cancel),
// connect_response[sender] => move |_, resp| {
// sender.input(if resp == gtk::ResponseType::Accept {
// SheetEditDialogInput::Accept
// } else {
// SheetEditDialogInput::Cancel
// })
// },
gtk::Box { gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
set_margin_all : 5, set_margin_all : 5,
@ -77,91 +68,73 @@ impl SimpleComponent for SheetEditDialogModel {
} }
} }
} }
// gtk::MessageDialog {
// set_modal: true,
// #[watch]
// set_visible: !model.hidden,
// set_text: Some("Edit sheet"),
// // set_secondary_text: Some("All unsaved changes will be lost"),
// add_button: ("Confirm", gtk::ResponseType::Accept),
// add_button: ("Cancel", gtk::ResponseType::Cancel),
// connect_response[sender] => move |_, resp| {
// sender.input(if resp == gtk::ResponseType::Accept {
// SheetEditDialogInput::Accept
// } else {
// SheetEditDialogInput::Cancel
// })
// },
// }
} }
fn init( fn init(
_params: Self::Init, params: Self::Init,
root: &Self::Root, root: &Self::Root,
sender: ComponentSender<Self>, sender: ComponentSender<Self>,
) -> ComponentParts<Self> { ) -> ComponentParts<Self> {
let sheet = params;
let mut sheet_name = String::new();
let mut sheet_composer = String::new();
let mut is_book = false;
match &sheet.kind {
crate::sheet::SheetKind::Sheet { name, .. } => {
sheet_name = name.to_string();
// sheet_composer = composer_id.to_string();
}
crate::sheet::SheetKind::Orphan => {
sheet_name = sheet.pdf.get_name().to_string();
}
crate::sheet::SheetKind::Book {
name,
composer_id,
sheet_ids,
} => todo!("Cannot yet handle books!"),
};
let model = SheetEditDialogModel { let model = SheetEditDialogModel {
hidden: true, hidden: false,
sheet: None, sheet: Some(sheet),
sheet_name: String::new(), sheet_name,
sheet_composer: String::new(), sheet_composer,
is_book,
book_sheets: Vec::new(),
}; };
let widgets = view_output!(); let widgets = view_output!();
ComponentParts { model, widgets } ComponentParts { model, widgets }
} }
fn update(&mut self, msg: Self::Input, sender: ComponentSender<Self>) { fn update(&mut self, msg: Self::Input, sender: ComponentSender<Self>) {
match msg { match msg {
SheetEditDialogInput::Show(sheet) => {
self.hidden = false;
self.sheet_name = sheet.pdf.get_name().to_string();
match &sheet.kind {
crate::sheet::SheetKind::Sheet {
name,
composer_id,
first_page,
book_id,
} => {
self.sheet_name = name.to_string();
self.sheet_composer = composer_id.to_string();
}
crate::sheet::SheetKind::Orphan => {
self.sheet_name = sheet.pdf.get_name().to_string();
self.sheet_composer = String::new();
}
crate::sheet::SheetKind::Book {
name,
composer_id,
sheet_ids,
} => todo!("Cannot yet handle books!"),
};
self.sheet = Some(sheet);
}
SheetEditDialogInput::Accept => { SheetEditDialogInput::Accept => {
self.hidden = true; self.hidden = true;
if let Some(mut sheet) = self.sheet.take() { if let Some(mut sheet) = self.sheet.take() {
match sheet.kind.borrow_mut() { // match sheet.kind.borrow_mut() {
crate::sheet::SheetKind::Sheet { // crate::sheet::SheetKind::Sheet {
name, // name,
composer_id, // composer_id,
first_page, // first_page,
book_id, // book_id,
} => { // } => {
todo!("Do something!!!"); // todo!("Do something!!!");
// name = "hello world"; // // name = "hello world";
// name = &mut self.sheet_name.clone(); // // name = &mut self.sheet_name.clone();
// composer_id = 0; // // composer_id = 0;
} // }
crate::sheet::SheetKind::Orphan => { // crate::sheet::SheetKind::Orphan => {
todo!("Create Sheet"); // todo!("Create Sheet");
} // }
crate::sheet::SheetKind::Book { // crate::sheet::SheetKind::Book {
name, // name,
composer_id, // composer_id,
sheet_ids, // sheet_ids,
} => todo!(), // } => todo!(),
}; // };
sender sender
.output(SheetEditDialogOutput::SheetEdited(sheet)) .output(SheetEditDialogOutput::SheetEdited(sheet))
.unwrap(); .unwrap();