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>,
edit_mode: bool,
scroll_adjustment: Adjustment,
sheet_edit_dialog: Controller<SheetEditDialogModel>,
sheet_edit_dialog: Option<Controller<SheetEditDialogModel>>,
}
#[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<Self>,
_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;

View File

@ -10,11 +10,12 @@ pub struct SheetEditDialogModel {
sheet: Option<Sheet>,
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<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 {
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<Self>) {
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();