From ee8a887caa3a9fa1f206b71919b219e1d68bad1a Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 26 May 2024 08:50:29 +0200 Subject: [PATCH] Make sheet edit dialog openable again --- src/ui/app.rs | 21 +++--- src/ui/sheet_edit_dialog.rs | 135 +++++++++++++++--------------------- 2 files changed, 63 insertions(+), 93 deletions(-) diff --git a/src/ui/app.rs b/src/ui/app.rs index b4df854..6344a24 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -29,7 +29,7 @@ pub struct AppModel { sheets_listing: Controller, edit_mode: bool, scroll_adjustment: Adjustment, - sheet_edit_dialog: Controller, + sheet_edit_dialog: Option>, } #[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 { database: Arc::new(init_data.database), directory: Arc::new(init_data.directory), @@ -144,7 +139,7 @@ impl AsyncComponent for AppModel { sheets_listing, edit_mode: false, scroll_adjustment: Adjustment::builder().build(), - sheet_edit_dialog, + sheet_edit_dialog: None, }; let widgets = view_output!(); @@ -156,7 +151,7 @@ impl AsyncComponent for AppModel { &mut self, message: Self::Input, sender: AsyncComponentSender, - _root: &Self::Root, + root: &Self::Root, ) { match message { AppInput::SearchStarted(query) => { @@ -165,10 +160,12 @@ impl AsyncComponent for AppModel { } AppInput::SheetPressed(sheet) => { if self.edit_mode { - self.sheet_edit_dialog - .sender() - .send(SheetEditDialogInput::Show(sheet)) - .unwrap(); + self.sheet_edit_dialog = Some( + SheetEditDialogModel::builder() + .transient_for(&root) + .launch(sheet) + .forward(sender.input_sender(), |_| todo!()), + ); } else { sheet.open_file(); let mut sheet = sheet; diff --git a/src/ui/sheet_edit_dialog.rs b/src/ui/sheet_edit_dialog.rs index a580e18..d221200 100644 --- a/src/ui/sheet_edit_dialog.rs +++ b/src/ui/sheet_edit_dialog.rs @@ -10,11 +10,12 @@ pub struct SheetEditDialogModel { sheet: Option, sheet_name: String, sheet_composer: String, + is_book: bool, + book_sheets: Vec<(String, String, i64)>, } #[derive(Debug)] pub enum SheetEditDialogInput { - Show(Sheet), Accept, Cancel, } @@ -26,26 +27,16 @@ pub enum SheetEditDialogOutput { #[relm4::component(pub)] impl SimpleComponent for SheetEditDialogModel { - type Init = (); + type Init = Sheet; type Input = SheetEditDialogInput; type Output = SheetEditDialogOutput; view! { gtk::Window { - set_modal: true, #[watch] set_visible: !model.hidden, + set_modal: true, 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 { set_orientation: gtk::Orientation::Vertical, 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( - _params: Self::Init, + params: Self::Init, root: &Self::Root, sender: ComponentSender, ) -> ComponentParts { + 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 { - hidden: true, - sheet: None, - sheet_name: String::new(), - sheet_composer: String::new(), + hidden: false, + sheet: Some(sheet), + sheet_name, + sheet_composer, + is_book, + book_sheets: Vec::new(), }; let widgets = view_output!(); + ComponentParts { model, widgets } } fn update(&mut self, msg: Self::Input, sender: ComponentSender) { 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 => { self.hidden = true; + if let Some(mut sheet) = self.sheet.take() { - match sheet.kind.borrow_mut() { - crate::sheet::SheetKind::Sheet { - name, - composer_id, - first_page, - book_id, - } => { - todo!("Do something!!!"); - // name = "hello world"; - // name = &mut self.sheet_name.clone(); - // composer_id = 0; - } - crate::sheet::SheetKind::Orphan => { - todo!("Create Sheet"); - } - crate::sheet::SheetKind::Book { - name, - composer_id, - sheet_ids, - } => todo!(), - }; + // match sheet.kind.borrow_mut() { + // crate::sheet::SheetKind::Sheet { + // name, + // composer_id, + // first_page, + // book_id, + // } => { + // todo!("Do something!!!"); + // // name = "hello world"; + // // name = &mut self.sheet_name.clone(); + // // composer_id = 0; + // } + // crate::sheet::SheetKind::Orphan => { + // todo!("Create Sheet"); + // } + // crate::sheet::SheetKind::Book { + // name, + // composer_id, + // sheet_ids, + // } => todo!(), + // }; sender .output(SheetEditDialogOutput::SheetEdited(sheet)) .unwrap();