From b171f39eaad00f1b8f1c33519962c83686ba6082 Mon Sep 17 00:00:00 2001 From: Emilia Date: Sat, 22 Nov 2025 23:07:29 -0500 Subject: [PATCH] Export json --- plate-tool-eframe/Cargo.toml | 1 + plate-tool-eframe/src/app.rs | 10 +++++++++- plate-tool-eframe/src/modals.rs | 13 +++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/plate-tool-eframe/Cargo.toml b/plate-tool-eframe/Cargo.toml index 3614a0c..dc66593 100644 --- a/plate-tool-eframe/Cargo.toml +++ b/plate-tool-eframe/Cargo.toml @@ -14,6 +14,7 @@ eframe = { version = "0.33", default-features = false, features = [ log = "0.4" serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] env_logger = "0.11" diff --git a/plate-tool-eframe/src/app.rs b/plate-tool-eframe/src/app.rs index 22a97ac..6e076ac 100644 --- a/plate-tool-eframe/src/app.rs +++ b/plate-tool-eframe/src/app.rs @@ -1,6 +1,8 @@ use std::ops::DerefMut; use std::sync::Mutex; +use serde_json; + use eframe::egui::{self}; use plate_tool_lib::csv::{ records_to_csv, records_to_echo_client_csv, transfer_to_records, TransferRecord, @@ -160,7 +162,13 @@ impl eframe::App for PlateToolEframe { save_file(bytes, Some("transfers.csv")); } } - if ui.button("Export as JSON").clicked() {} + if ui.button("Export as JSON").clicked() { + let data = serde_json::to_string_pretty(&self.main_state); + if let Ok(data) = data { + let bytes: &[u8] = data.as_bytes(); + save_file(bytes, Some("plate_tool_state.json")); + } + } }); ui.menu_button("Import", |ui| { if ui.button("Import from JSON").clicked() {} diff --git a/plate-tool-eframe/src/modals.rs b/plate-tool-eframe/src/modals.rs index fe8115b..72e74c9 100644 --- a/plate-tool-eframe/src/modals.rs +++ b/plate-tool-eframe/src/modals.rs @@ -125,6 +125,19 @@ pub fn open_new_plate_modal(modal_state: &mut ModalState) { } } +pub fn open_new_plate_modal_with_default_type( + modal_state: &mut ModalState, + plate_type: plate_tool_lib::plate::PlateType, +) { + // Do not close another modal + if matches!(modal_state, ModalState::None) { + *modal_state = ModalState::NewPlate(NewPlateModalState { + plate_type: plate_type, + ..Default::default() + }); + } +} + #[non_exhaustive] #[derive(Debug, Clone)] pub struct EditPlateModalState {