mod canvas;
mod jobs;
mod photo;
mod rig_window;
mod window;
use super::host::Host;
use crate::{RoughPlanModel, locate_io::rig_form::default_stone_n, settings::SettingsPersister};
use indicatrix_cut_core::rough_plan::locate::RigProfile;
use slint::ComponentHandle;
use std::rc::Rc;
pub(super) fn open_locate(planner: &Rc<Host>) {
window::open(planner);
}
pub(super) fn close_windows() {
window::close();
rig_window::close();
}
fn stored_rigs() -> Vec<RigProfile> {
SettingsPersister::installed_for_this_thread()
.map(|persister| persister.snapshot().rig_profiles)
.unwrap_or_default()
}
fn update_rigs(change: impl FnOnce(&mut Vec<RigProfile>)) -> bool {
SettingsPersister::installed_for_this_thread().is_some_and(|persister| {
persister.update(|file| change(&mut file.rig_profiles));
true
})
}
fn planner_stone_n(planner: &Host) -> f64 {
let index = planner
.window
.global::<RoughPlanModel>()
.get_material_index();
let name = usize::try_from(index).ok().and_then(|i| {
planner
.session
.borrow()
.choices
.get(i)
.map(|c| c.name.clone())
});
name.map_or_else(|| default_stone_n(""), |name| default_stone_n(&name))
}