Implemented opening of pdfs
This commit is contained in:
13
src/main.rs
13
src/main.rs
@@ -17,6 +17,7 @@ struct AppModel {
|
||||
#[derive(Debug)]
|
||||
enum AppInput {
|
||||
McduInput(char),
|
||||
SheetPressed(PathBuf),
|
||||
}
|
||||
|
||||
#[relm4::component]
|
||||
@@ -71,9 +72,14 @@ impl SimpleComponent for AppModel {
|
||||
mcdu::McduOutput::ButtonPress(c) => AppInput::McduInput(c),
|
||||
});
|
||||
|
||||
let sheet_listing = SheetListingModel::builder()
|
||||
.launch(path)
|
||||
.forward(sender.input_sender(), |_response| todo!());
|
||||
let sheet_listing =
|
||||
SheetListingModel::builder()
|
||||
.launch(path)
|
||||
.forward(sender.input_sender(), |response| match response {
|
||||
sheet_listing::SheetPressedMessage::SheetPressed(path) => {
|
||||
AppInput::SheetPressed(path)
|
||||
}
|
||||
});
|
||||
|
||||
let model = AppModel {
|
||||
text: String::from("Text: "),
|
||||
@@ -89,6 +95,7 @@ impl SimpleComponent for AppModel {
|
||||
fn update(&mut self, message: Self::Input, _sender: ComponentSender<Self>) {
|
||||
match message {
|
||||
AppInput::McduInput(c) => self.text.push(c),
|
||||
AppInput::SheetPressed(sheet) => opener::open(sheet).unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -11,20 +11,31 @@ pub struct SheetModel {
|
||||
path: PathBuf,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SheetModelInput {
|
||||
OnClicked,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SheetPressedMessage {
|
||||
SheetPressed(PathBuf),
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for SheetModel {
|
||||
type Init = PathBuf;
|
||||
type Input = ();
|
||||
type Output = ();
|
||||
type Input = SheetModelInput;
|
||||
type Output = SheetPressedMessage;
|
||||
|
||||
view! {
|
||||
#[root]
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
gtk::Label {
|
||||
append = >k::Button {
|
||||
set_label: &format!("{}", model.path.file_name().unwrap().to_string_lossy()),
|
||||
set_halign: gtk::Align::Start,
|
||||
set_margin_all: 10,
|
||||
connect_clicked[sender] => move |_| sender.input(SheetModelInput::OnClicked),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,21 +43,31 @@ impl SimpleComponent for SheetModel {
|
||||
fn init(
|
||||
path: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = SheetModel { path };
|
||||
let widgets = view_output!();
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>) {
|
||||
match message {
|
||||
SheetModelInput::OnClicked => sender
|
||||
.output(SheetPressedMessage::SheetPressed(self.path.clone()))
|
||||
.unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct SheetListingModel;
|
||||
pub struct SheetListingModel {
|
||||
_sheet_models: Vec<Controller<SheetModel>>,
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for SheetListingModel {
|
||||
type Init = PathBuf;
|
||||
type Input = ();
|
||||
type Output = ();
|
||||
type Output = SheetPressedMessage;
|
||||
|
||||
view! {
|
||||
#[root]
|
||||
@@ -58,8 +79,10 @@ impl SimpleComponent for SheetListingModel {
|
||||
fn init(
|
||||
dir: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let mut sheet_models = Vec::new();
|
||||
|
||||
for entry in WalkDir::new(dir)
|
||||
.into_iter()
|
||||
.filter_map(|e| e.ok())
|
||||
@@ -71,11 +94,16 @@ impl SimpleComponent for SheetListingModel {
|
||||
.unwrap_or(false)
|
||||
})
|
||||
{
|
||||
let sheet_model = SheetModel::builder().launch(entry);
|
||||
let sheet_model = SheetModel::builder()
|
||||
.launch(entry)
|
||||
.forward(sender.output_sender(), |m| m);
|
||||
root.append(sheet_model.widget());
|
||||
sheet_models.push(sheet_model);
|
||||
}
|
||||
|
||||
let model = SheetListingModel;
|
||||
let model = SheetListingModel {
|
||||
_sheet_models: sheet_models,
|
||||
};
|
||||
let widgets = view_output!();
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
Reference in New Issue
Block a user