use super::{ConfigPersistence, MenuConfig, PerformanceLevel};
use std::io;
pub struct MenuConfigDialog {
config: MenuConfig,
persistence: ConfigPersistence,
}
impl MenuConfigDialog {
pub fn new(config: MenuConfig) -> Self {
Self { config, persistence: ConfigPersistence::new() }
}
pub fn with_persistence(config: MenuConfig, persistence: ConfigPersistence) -> Self {
Self { config, persistence }
}
pub fn config(&self) -> &MenuConfig {
&self.config
}
pub fn config_mut(&mut self) -> &mut MenuConfig {
&mut self.config
}
pub fn toggle_animations(&mut self) {
let new_value = !self.config.animations_enabled();
self.config.set_animations_enabled(new_value);
}
pub fn toggle_transparency(&mut self) {
let new_value = !self.config.transparency_enabled();
self.config.set_transparency_enabled(new_value);
}
pub fn toggle_shadows(&mut self) {
let new_value = !self.config.shadows_enabled();
self.config.set_shadows_enabled(new_value);
}
pub fn toggle_blur(&mut self) {
let new_value = !self.config.blur_enabled();
self.config.set_blur_enabled(new_value);
}
pub fn increase_animation_speed(&mut self) {
let current = self.config.animation_speed();
let new_speed = (current + 0.1).min(3.0);
self.config.set_animation_speed(new_speed);
}
pub fn decrease_animation_speed(&mut self) {
let current = self.config.animation_speed();
let new_speed = (current - 0.1).max(0.1);
self.config.set_animation_speed(new_speed);
}
pub fn increase_max_items(&mut self) {
let current = self.config.max_visible_items();
self.config.set_max_visible_items(current + 5);
}
pub fn decrease_max_items(&mut self) {
let current = self.config.max_visible_items();
if current > 5 {
self.config.set_max_visible_items(current - 5);
}
}
pub fn reset_to_defaults(&mut self) {
self.config.reset_to_defaults();
}
pub fn save(&self) -> io::Result<()> {
self.persistence.save(&self.config)
}
pub fn load(&mut self) -> io::Result<()> {
let overrides = self.persistence.load()?;
self.config.user_overrides = overrides;
self.config.apply_user_overrides();
Ok(())
}
pub fn settings_summary(&self) -> String {
self.config.settings_summary()
}
pub fn has_overrides(&self) -> bool {
self.config.has_user_overrides()
}
pub fn hardware_performance_level(&self) -> PerformanceLevel {
self.config.hardware_caps().performance_level
}
pub fn gpu_description(&self) -> String {
format!(
"{} ({} MB)",
self.config.hardware_caps().gpu_type.description(),
self.config.hardware_caps().gpu_memory_mb
)
}
}