using System; using System.ComponentModel; using System.IO; using System.Runtime.CompilerServices; using System.Windows; using System.Xml.Serialization; namespace CodeMerger { public class Settings : INotifyPropertyChanged { private static readonly string SettingsFilePath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "CodeMerger", "settings.xml"); #region Propiedades de Ventana private double _windowWidth = 1200; private double _windowHeight = 800; private double _windowLeft = 100; private double _windowTop = 100; private WindowState _windowState = WindowState.Normal; public double WindowWidth { get => _windowWidth; set { if (_windowWidth != value) { _windowWidth = value; OnPropertyChanged(); } } } public double WindowHeight { get => _windowHeight; set { if (_windowHeight != value) { _windowHeight = value; OnPropertyChanged(); } } } public double WindowLeft { get => _windowLeft; set { if (_windowLeft != value) { _windowLeft = value; OnPropertyChanged(); } } } public double WindowTop { get => _windowTop; set { if (_windowTop != value) { _windowTop = value; OnPropertyChanged(); } } } public WindowState WindowState { get => _windowState; set { if (_windowState != value) { _windowState = value; OnPropertyChanged(); } } } #endregion #region Tamaños de Columnas private double _firstColumnWidth = 400; private double _secondColumnWidth = 400; private double _thirdColumnWidth = 400; public double FirstColumnWidth { get => _firstColumnWidth; set { if (_firstColumnWidth != value) { _firstColumnWidth = value; OnPropertyChanged(); } } } public double SecondColumnWidth { get => _secondColumnWidth; set { if (_secondColumnWidth != value) { _secondColumnWidth = value; OnPropertyChanged(); } } } public double ThirdColumnWidth { get => _thirdColumnWidth; set { if (_thirdColumnWidth != value) { _thirdColumnWidth = value; OnPropertyChanged(); } } } #endregion #region Carga y Guardado public static Settings Load() { try { // Asegurarse de que el directorio existe string directory = Path.GetDirectoryName(SettingsFilePath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // Cargar configuración si existe if (File.Exists(SettingsFilePath)) { using (var stream = File.OpenRead(SettingsFilePath)) { var serializer = new XmlSerializer(typeof(Settings)); return (Settings)serializer.Deserialize(stream); } } } catch (Exception) { // En caso de error, devolver configuración por defecto } return new Settings(); } public void Save() { try { string directory = Path.GetDirectoryName(SettingsFilePath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } using (var stream = File.Create(SettingsFilePath)) { var serializer = new XmlSerializer(typeof(Settings)); serializer.Serialize(stream, this); } } catch (Exception) { // Manejar error de guardado } } #endregion #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }