CodeMergeNG/Settings.cs

205 lines
5.2 KiB
C#
Raw Normal View History

2025-02-28 10:43:44 -03:00
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
}
}