aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2026-01-24 15:03:57 +0000
committers-ol <s+removethis@s-ol.nu>2026-01-24 15:26:15 +0000
commit1ec24549a4a285a9dfedd6a6e293aacd758797ea (patch)
tree13ea2fa27288a34f96a062ca6d09b57b0b34496b
parentobey clippy (diff)
downloadnodetoy-1ec24549a4a285a9dfedd6a6e293aacd758797ea.tar.gz
nodetoy-1ec24549a4a285a9dfedd6a6e293aacd758797ea.zip
move file state into App
-rw-r--r--src/main.rs36
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();