use crate::{
EditorModel, MainWindow,
settings::{SettingsPersister, model::AppSettings},
};
use slint::ComponentHandle;
use std::sync::Arc;
const FIRST_RUN_INSPECTOR_HEIGHT: f32 = 340.0;
pub(super) fn apply_editor_layout_from_settings(ui: &MainWindow, s: &AppSettings) {
let editor = ui.global::<EditorModel>();
editor.set_dock_width(s.editor_dock_width);
let inspector_height = if s.editor_layout_touched {
s.editor_inspector_height
} else {
s.editor_inspector_height.max(FIRST_RUN_INSPECTOR_HEIGHT)
};
editor.set_inspector_height(inspector_height);
editor.set_settings_collapsed(s.editor_settings_collapsed);
editor.set_inspector_collapsed(s.editor_inspector_collapsed);
editor.set_remap_collapsed(s.editor_remap_collapsed);
}
pub(super) fn setup_editor_layout_callbacks(
ui: &MainWindow,
settings_store: &Arc<SettingsPersister>,
) {
let settings_store = settings_store.clone();
let ui_weak = ui.as_weak();
ui.global::<EditorModel>().on_layout_changed(move || {
let Some(ui) = ui_weak.upgrade() else {
return;
};
let editor = ui.global::<EditorModel>();
let dock_width = editor.get_dock_width();
let inspector_height = editor.get_inspector_height();
let settings_collapsed = editor.get_settings_collapsed();
let inspector_collapsed = editor.get_inspector_collapsed();
let remap_collapsed = editor.get_remap_collapsed();
settings_store.update(|s| {
s.settings.editor_dock_width = dock_width;
s.settings.editor_inspector_height = inspector_height;
s.settings.editor_settings_collapsed = settings_collapsed;
s.settings.editor_inspector_collapsed = inspector_collapsed;
s.settings.editor_remap_collapsed = remap_collapsed;
s.settings.editor_layout_touched = true;
});
});
}