// Map, wardley map editor for linux // Copyright (C) 2026 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . use std::convert::identity; use adw::prelude::*; use relm4::prelude::*; use crate::actions::Action; use crate::components::header::HeaderAction; use crate::components::preferences_window::PreferencesWindow; use crate::file_registry; use crate::preferences::{UserPreferences, storage}; use crate::AppModel; /// Shows the preferences window. pub fn show(model: &mut AppModel, sender: &ComponentSender) { if model.preferences_window.is_none() { let controller = PreferencesWindow::builder() .transient_for(&model.window) .launch(model.preferences.clone()) .forward(sender.input_sender(), identity); model.preferences_window = Some(controller); } if let Some(ref controller) = model.preferences_window { controller.widget().present(); } } /// Closes the preferences window. pub fn close(model: &mut AppModel) { model.preferences_window = None; } /// Closes and reopens the preferences window. pub fn reload_window(model: &mut AppModel, sender: &ComponentSender) { if let Some(controller) = model.preferences_window.take() { controller.widget().destroy(); } model.preferences_window = None; show(model, sender); } /// Reloads the preferences. pub fn reload(model: &mut AppModel) { model.preferences = storage::load(); model.apply_preferences(); model.header.emit(HeaderAction::SetCustomStages( model.preferences.custom_stages.clone(), )); model.header.emit(HeaderAction::SetCustomStages( model.preferences.custom_stages.clone(), )); model.header.emit(HeaderAction::SetTemplates( model.preferences.map_templates.clone(), )); model.update_image(); } /// Updates preferences after they change. pub fn update(model: &mut AppModel, preferences: UserPreferences) { model.preferences = preferences; model.apply_preferences(); model.header.emit(HeaderAction::SetCustomStages( model.preferences.custom_stages.clone(), )); model.header.emit(HeaderAction::SetTemplates( model.preferences.map_templates.clone(), )); model.update_image(); file_registry::broadcast_to_all_windows(&Action::ReloadPreferences); }