Introduced saving template to file

This commit is contained in:
2025-12-28 17:39:16 -06:00
parent f9cb5ded06
commit a13a2e3105
3 changed files with 28 additions and 8 deletions

View File

@@ -1,25 +1,25 @@
use std::{fs::File, io::Write};
use eframe::egui::{self, Id}; use eframe::egui::{self, Id};
use rfd::FileDialog; use rfd::FileDialog;
use crate::template::{self, Template}; use crate::template::{self, Template};
pub struct MyEguiApp { pub struct App {
templates: Vec<Template>, templates: Vec<Template>,
selected_template: Option<usize>, selected_template: Option<usize>,
error_value: Option<anyhow_serde::Error>, error_value: Option<anyhow_serde::Error>,
} }
impl MyEguiApp { impl App {
pub fn new(cc: &eframe::CreationContext<'_>) -> Self { pub fn new(cc: &eframe::CreationContext<'_>) -> Self {
MyEguiApp { templates: Vec::new(), selected_template: None, error_value: None} Self { templates: Vec::new(), selected_template: None, error_value: None}
} }
} }
impl eframe::App for MyEguiApp { impl eframe::App for App {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Hello, World!");
if self.error_value.is_some() { if self.error_value.is_some() {
egui::Modal::new(Id::new("Error Box")).show(ui.ctx(), |ui| { egui::Modal::new(Id::new("Error Box")).show(ui.ctx(), |ui| {
ui.heading("An Error Has Occurred"); ui.heading("An Error Has Occurred");
@@ -41,9 +41,28 @@ impl eframe::App for MyEguiApp {
} }
} }
}; };
}; };
if ui.button("New Template").clicked() {
let file = FileDialog::new().add_filter("text", &["txt"]).set_directory("/").save_file();
if let Some(path) = file {
let handle = std::fs::OpenOptions::new().write(true).create(true).truncate(true).open(path);
match handle {
Ok(mut handle) => {
let templ = Template::new();
let var = ron::ser::to_string(&templ).unwrap();
handle.write(var.as_bytes()).unwrap();
handle.flush().unwrap();
}
Err(e) => {
self.error_value = Some(e.into())
}
}
}
}
let combo_text = match self.selected_template { let combo_text = match self.selected_template {
Some(num) => {&self.templates[num].get_label()} Some(num) => {&self.templates[num].get_label()}
None => "Select a template" None => "Select a template"

View File

@@ -3,7 +3,7 @@ mod template;
fn main() { fn main() {
let native_options = eframe::NativeOptions::default(); let native_options = eframe::NativeOptions::default();
eframe::run_native("test app", native_options, Box::new(|cc| Ok(Box::new(app::MyEguiApp::new(cc))))); eframe::run_native("Bretting Templates", native_options, Box::new(|cc| Ok(Box::new(app::App::new(cc)))));
} }

1
success.txt Normal file
View File

@@ -0,0 +1 @@
(label:"Template",content:[])