First try in implementing sheet edit dialog
This commit is contained in:
parent
2ffd0bbbc3
commit
9692b1a825
176
src/ui/sheet_edit_dialog.rs
Normal file
176
src/ui/sheet_edit_dialog.rs
Normal file
@ -0,0 +1,176 @@
|
||||
use std::borrow::BorrowMut;
|
||||
|
||||
use gtk::prelude::*;
|
||||
use relm4::prelude::*;
|
||||
|
||||
use crate::sheet::Sheet;
|
||||
|
||||
pub struct SheetEditDialogModel {
|
||||
hidden: bool,
|
||||
sheet: Option<Sheet>,
|
||||
sheet_name: String,
|
||||
sheet_composer: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SheetEditDialogInput {
|
||||
Show(Sheet),
|
||||
Accept,
|
||||
Cancel,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SheetEditDialogOutput {
|
||||
SheetEdited(Sheet),
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for SheetEditDialogModel {
|
||||
type Init = ();
|
||||
type Input = SheetEditDialogInput;
|
||||
type Output = SheetEditDialogOutput;
|
||||
|
||||
view! {
|
||||
gtk::Window {
|
||||
set_modal: true,
|
||||
#[watch]
|
||||
set_visible: !model.hidden,
|
||||
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,
|
||||
gtk::Label {
|
||||
set_text: "Sheet name"
|
||||
},
|
||||
gtk::Entry {
|
||||
#[watch]
|
||||
set_text: &model.sheet_name,
|
||||
},
|
||||
gtk::Label {
|
||||
set_text: "Sheet composer"
|
||||
},
|
||||
gtk::Entry {
|
||||
#[watch]
|
||||
set_text : &model.sheet_composer,
|
||||
},
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_margin_top:5,
|
||||
gtk::Button {
|
||||
set_label : "Confirm",
|
||||
connect_clicked[sender] => move |_| sender.input(SheetEditDialogInput::Accept)
|
||||
},
|
||||
gtk::Button {
|
||||
set_label: "Cancel",
|
||||
connect_clicked[sender] => move |_| sender.input(SheetEditDialogInput::Cancel)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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,
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = SheetEditDialogModel {
|
||||
hidden: true,
|
||||
sheet: None,
|
||||
sheet_name: String::new(),
|
||||
sheet_composer: String::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!(),
|
||||
};
|
||||
sender
|
||||
.output(SheetEditDialogOutput::SheetEdited(sheet))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
SheetEditDialogInput::Cancel => {
|
||||
self.hidden = true;
|
||||
self.sheet = None;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user