Make sheet edit dialog openable again
This commit is contained in:
parent
9692b1a825
commit
ee8a887caa
@ -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;
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user