diff options
| author | s-ol <s+removethis@s-ol.nu> | 2026-01-24 15:03:57 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2026-01-24 15:26:15 +0000 |
| commit | 1ec24549a4a285a9dfedd6a6e293aacd758797ea (patch) | |
| tree | 13ea2fa27288a34f96a062ca6d09b57b0b34496b | |
| parent | obey clippy (diff) | |
| download | nodetoy-1ec24549a4a285a9dfedd6a6e293aacd758797ea.tar.gz nodetoy-1ec24549a4a285a9dfedd6a6e293aacd758797ea.zip | |
move file state into App
| -rw-r--r-- | src/main.rs | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/main.rs b/src/main.rs index 1e836d4..8b3241e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -48,22 +48,14 @@ static COLOR_INACTIVE: Color32 = Color32::from_rgb(0x90, 0x90, 0x90); pub struct Viewer { dirty: bool, - filename: Option<PathBuf>, error: Option<GraphError>, - - #[cfg(target_arch = "wasm32")] - save_as_dialog: Option<String>, } impl Default for Viewer { fn default() -> Self { Self { dirty: true, - filename: None, error: None, - - #[cfg(target_arch = "wasm32")] - save_as_dialog: None, } } } @@ -233,8 +225,12 @@ impl SnarlViewer<AnyNode> for Viewer { pub struct App { snarl: Snarl<AnyNode>, + filename: Option<PathBuf>, viewer: Viewer, preview: preview::Preview, + + #[cfg(target_arch = "wasm32")] + save_as_dialog: Option<String>, } lazy_static! { @@ -293,10 +289,14 @@ impl App { .and_then(|data| serde_json::from_str(&data).ok()) .unwrap_or_default(); - App { + Self { snarl, + filename: None, viewer: Default::default(), preview: preview::Preview::new(cx).expect("Failed to init preview"), + + #[cfg(target_arch = "wasm32")] + save_as_dialog: None, } } } @@ -336,6 +336,7 @@ impl eframe::App for App { if ui.button(*label).clicked() { self.snarl = serde_json::from_str(EXAMPLES.get(label).unwrap()).unwrap(); + self.filename = Some(PathBuf::from(label)); self.viewer.dirty = true; } } @@ -344,7 +345,7 @@ impl eframe::App for App { ui.separator(); if ui - .add_enabled(self.viewer.filename.is_some(), egui::Button::new("Save")) + .add_enabled(self.filename.is_some(), egui::Button::new("Save")) .clicked() { do_save = true; @@ -357,15 +358,14 @@ impl eframe::App for App { .add_filter("Nodetoy shader", &["nt.json"]) .save_file() { - self.viewer.filename = Some(path); + self.filename = Some(path); do_save = true; } } #[cfg(target_arch = "wasm32")] { - self.viewer.save_as_dialog = self - .viewer + self.save_as_dialog = self .filename .as_ref() .map(|p| p.as_os_str().to_string_lossy().to_string()) @@ -376,7 +376,7 @@ impl eframe::App for App { if ui.button("Clear All").clicked() { self.snarl = Snarl::default(); - self.viewer.filename = None; + self.filename = None; } #[cfg(not(target_arch = "wasm32"))] @@ -386,7 +386,7 @@ impl eframe::App for App { }); #[cfg(target_arch = "wasm32")] - if let Some(buffer) = &mut self.viewer.save_as_dialog { + if let Some(buffer) = &mut self.save_as_dialog { let modal = egui::Modal::new(egui::Id::new("save")).show(ui.ctx(), |ui| { ui.set_width(250.0); @@ -407,7 +407,7 @@ impl eframe::App for App { *buffer += ".nt.json"; } - self.viewer.filename = Some(PathBuf::from(&buffer)); + self.filename = Some(PathBuf::from(&buffer)); do_save = true; ui.close(); } @@ -420,12 +420,12 @@ impl eframe::App for App { }); if modal.should_close() { - self.viewer.save_as_dialog = None; + self.save_as_dialog = None; } } if do_save { - let path = self.viewer.filename.as_ref().unwrap(); + let path = self.filename.as_ref().unwrap(); #[cfg(not(target_arch = "wasm32"))] let file = std::fs::File::create(path).unwrap(); |
