diff --git a/src/app/settings.rs b/src/app/settings.rs index c4be2e0cf..e7f8c445b 100644 --- a/src/app/settings.rs +++ b/src/app/settings.rs @@ -65,7 +65,6 @@ pub struct UserSettings { pub ortho: bool, pub polar: bool, pub polar_increment_deg: f32, - pub show_grid: bool, pub snap_enabled: bool, pub otrack: bool, /// Active snap modes, in `SNAP_ORDER`. @@ -90,7 +89,6 @@ impl Default for UserSettings { ortho: false, polar: false, polar_increment_deg: 45.0, - show_grid: false, snap_enabled: false, otrack: false, snap_modes: vec![ @@ -135,7 +133,6 @@ impl UserSettings { s.polar_increment_deg = v; } } - "grid" => s.show_grid = val == "1", "osnap" => s.snap_enabled = val == "1", "otrack" => s.otrack = val == "1", "default_assoc_prompted" => s.default_assoc_prompted = val == "1", @@ -180,12 +177,11 @@ impl UserSettings { .collect::>() .join(","); let body = format!( - "dyn={}\northo={}\npolar={}\npolar_increment_deg={}\ngrid={}\nosnap={}\notrack={}\ndefault_assoc_prompted={}\nsnap_modes={}\ndisabled_plugins={}\nplugin_repos={}\n", + "dyn={}\northo={}\npolar={}\npolar_increment_deg={}\nosnap={}\notrack={}\ndefault_assoc_prompted={}\nsnap_modes={}\ndisabled_plugins={}\nplugin_repos={}\n", b(self.dyn_input), b(self.ortho), b(self.polar), self.polar_increment_deg, - b(self.show_grid), b(self.snap_enabled), b(self.otrack), b(self.default_assoc_prompted), diff --git a/src/app/update.rs b/src/app/update.rs index a93028a2e..e249765c2 100644 --- a/src/app/update.rs +++ b/src/app/update.rs @@ -185,7 +185,6 @@ impl OpenCADStudio { ortho: self.ortho_mode, polar: self.polar_mode, polar_increment_deg: self.polar_increment_deg, - show_grid: self.show_grid, snap_enabled: self.snapper.snap_enabled, otrack: self.snapper.otrack_enabled, snap_modes: super::settings::UserSettings::modes_from(self.snapper.enabled.iter()), @@ -205,7 +204,6 @@ impl OpenCADStudio { self.ortho_mode = s.ortho; self.polar_mode = s.polar; self.polar_increment_deg = s.polar_increment_deg; - self.show_grid = s.show_grid; self.snapper.snap_enabled = s.snap_enabled; self.snapper.otrack_enabled = s.otrack; self.snapper.enabled = s.snap_modes.iter().copied().collect(); @@ -600,6 +598,11 @@ impl OpenCADStudio { // selected — see #21. self.sync_ribbon_from_selection(); self.tabs[i].scene.restore_saved_camera(); + // Grid visibility is a per-drawing view setting — adopt the + // opened file's saved state rather than a global preference. + if let Some(grid_on) = self.tabs[i].scene.active_vport_grid_on() { + self.show_grid = grid_on; + } self.sync_render_mode_to_active_tile(i); self.tabs[i].last_synced_camera_gen = self.tabs[i].scene.camera_generation; self.tabs[i].dirty = false; diff --git a/src/scene/mod.rs b/src/scene/mod.rs index bf9b8a31f..3e4aa9e40 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -5639,6 +5639,17 @@ impl Scene { } } + /// Grid visibility stored on the `*Active` VPort entry, applied to the app's + /// grid toggle when a file loads (grid is a per-drawing view setting, not a + /// global preference). `None` when there is no active entry. (#121) + pub fn active_vport_grid_on(&self) -> Option { + self.document + .vports + .iter() + .find(|v| v.name == "*Active") + .map(|v| v.grid_on) + } + /// Set the paper-space camera from the sheet viewport's stored view. /// Returns true if a valid sheet viewport was found and the camera was set. ///