222 lines
7.8 KiB
C#
222 lines
7.8 KiB
C#
|
using System;
|
|||
|
using System.Windows;
|
|||
|
using System.Windows.Media;
|
|||
|
using System.Linq;
|
|||
|
using System.Windows.Controls;
|
|||
|
using MessageBox = System.Windows.MessageBox;
|
|||
|
using TextBox = System.Windows.Controls.TextBox;
|
|||
|
using Button = System.Windows.Controls.Button;
|
|||
|
|
|||
|
namespace GTPCorrgir
|
|||
|
{
|
|||
|
public partial class SettingsWindow : Window
|
|||
|
{
|
|||
|
private readonly UserSettings settings;
|
|||
|
private readonly ErrorLogger errorLogger;
|
|||
|
private readonly ChatHistory chatHistory;
|
|||
|
|
|||
|
public SettingsWindow()
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
settings = UserSettings.Instance;
|
|||
|
errorLogger = new ErrorLogger();
|
|||
|
chatHistory = new ChatHistory();
|
|||
|
|
|||
|
LoadSettings();
|
|||
|
InitializeFontControls();
|
|||
|
}
|
|||
|
|
|||
|
private void InitializeFontControls()
|
|||
|
{
|
|||
|
// Cargar tamaños de fuente comunes
|
|||
|
FontSizeCombo.ItemsSource = new[] { 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24 };
|
|||
|
FontSizeCombo.SelectedItem = settings.Appearance.FontSize;
|
|||
|
|
|||
|
// Cargar fuentes del sistema
|
|||
|
var fontFamilies = Fonts.SystemFontFamilies
|
|||
|
.OrderBy(f => f.Source)
|
|||
|
.Select(f => f.Source);
|
|||
|
FontFamilyCombo.ItemsSource = fontFamilies;
|
|||
|
FontFamilyCombo.SelectedItem = settings.Appearance.FontFamily;
|
|||
|
}
|
|||
|
|
|||
|
private void LoadSettings()
|
|||
|
{
|
|||
|
// Tema
|
|||
|
(settings.Appearance.Theme == "Light" ? LightTheme : DarkTheme).IsChecked = true;
|
|||
|
|
|||
|
// Opacidad
|
|||
|
OpacityDelaySlider.Value = settings.Appearance.OpacityDelay / 1000.0;
|
|||
|
|
|||
|
// Comportamiento
|
|||
|
AutoSaveCheckbox.IsChecked = settings.Behavior.AutoSaveHistory;
|
|||
|
ShowNotificationsCheckbox.IsChecked = settings.Behavior.ShowNotifications;
|
|||
|
AutoCopyCheckbox.IsChecked = settings.Behavior.AutoCopyToClipboard;
|
|||
|
NotificationDurationSlider.Value = settings.Behavior.NotificationDuration / 1000.0;
|
|||
|
}
|
|||
|
|
|||
|
private async void ViewErrorLogs_Click(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
string summary = await errorLogger.GetErrorSummaryAsync();
|
|||
|
ShowScrollableDialog("Registros de Error", summary);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show($"Error al cargar los registros: {ex.Message}",
|
|||
|
"Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void ShowScrollableDialog(string title, string content)
|
|||
|
{
|
|||
|
var dialog = new Window
|
|||
|
{
|
|||
|
Title = title,
|
|||
|
Width = 600,
|
|||
|
Height = 400,
|
|||
|
WindowStartupLocation = WindowStartupLocation.CenterOwner,
|
|||
|
Owner = this,
|
|||
|
ResizeMode = ResizeMode.CanResize,
|
|||
|
ShowInTaskbar = false
|
|||
|
};
|
|||
|
|
|||
|
var textBox = new TextBox
|
|||
|
{
|
|||
|
Text = content,
|
|||
|
IsReadOnly = true,
|
|||
|
TextWrapping = TextWrapping.Wrap,
|
|||
|
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
|
|||
|
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto,
|
|||
|
Margin = new Thickness(10),
|
|||
|
AcceptsReturn = true
|
|||
|
};
|
|||
|
|
|||
|
var grid = new Grid();
|
|||
|
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
|
|||
|
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
|
|||
|
|
|||
|
var closeButton = new Button
|
|||
|
{
|
|||
|
Content = "Cerrar",
|
|||
|
Width = 80,
|
|||
|
Height = 25,
|
|||
|
Margin = new Thickness(10),
|
|||
|
HorizontalAlignment = System.Windows.HorizontalAlignment.Right
|
|||
|
};
|
|||
|
closeButton.Click += (s, e) => dialog.Close();
|
|||
|
|
|||
|
Grid.SetRow(textBox, 0);
|
|||
|
Grid.SetRow(closeButton, 1);
|
|||
|
|
|||
|
grid.Children.Add(textBox);
|
|||
|
grid.Children.Add(closeButton);
|
|||
|
|
|||
|
dialog.Content = grid;
|
|||
|
dialog.ShowDialog();
|
|||
|
}
|
|||
|
|
|||
|
private async void ClearHistory_Click(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
var result = MessageBox.Show(
|
|||
|
"¿Está seguro de que desea borrar todo el historial de chat?\nEsta acción no se puede deshacer.",
|
|||
|
"Confirmar borrado",
|
|||
|
MessageBoxButton.YesNo,
|
|||
|
MessageBoxImage.Warning
|
|||
|
);
|
|||
|
|
|||
|
if (result == MessageBoxResult.Yes)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
// Aquí implementarías la lógica para borrar el historial
|
|||
|
// Por ejemplo: await chatHistory.ClearAllAsync();
|
|||
|
|
|||
|
MessageBox.Show(
|
|||
|
"El historial ha sido borrado correctamente.",
|
|||
|
"Éxito",
|
|||
|
MessageBoxButton.OK,
|
|||
|
MessageBoxImage.Information
|
|||
|
);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await errorLogger.LogErrorAsync(ex, "Error al borrar historial");
|
|||
|
MessageBox.Show(
|
|||
|
$"Error al borrar el historial: {ex.Message}",
|
|||
|
"Error",
|
|||
|
MessageBoxButton.OK,
|
|||
|
MessageBoxImage.Error
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void ResetSettings_Click(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
var result = MessageBox.Show(
|
|||
|
"¿Está seguro de que desea restablecer toda la configuración a sus valores predeterminados?",
|
|||
|
"Confirmar restablecimiento",
|
|||
|
MessageBoxButton.YesNo,
|
|||
|
MessageBoxImage.Warning
|
|||
|
);
|
|||
|
|
|||
|
if (result == MessageBoxResult.Yes)
|
|||
|
{
|
|||
|
settings.ResetToDefaults();
|
|||
|
LoadSettings();
|
|||
|
MessageBox.Show(
|
|||
|
"La configuración ha sido restablecida correctamente.",
|
|||
|
"Éxito",
|
|||
|
MessageBoxButton.OK,
|
|||
|
MessageBoxImage.Information
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void SaveButton_Click(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
// Guardar tema
|
|||
|
settings.Appearance.Theme = LightTheme.IsChecked == true ? "Light" : "Dark";
|
|||
|
|
|||
|
// Guardar fuente
|
|||
|
if (FontSizeCombo.SelectedItem != null)
|
|||
|
settings.Appearance.FontSize = (int)FontSizeCombo.SelectedItem;
|
|||
|
|
|||
|
if (FontFamilyCombo.SelectedItem != null)
|
|||
|
settings.Appearance.FontFamily = FontFamilyCombo.SelectedItem.ToString();
|
|||
|
|
|||
|
// Guardar opacidad
|
|||
|
settings.Appearance.OpacityDelay = (int)(OpacityDelaySlider.Value * 1000);
|
|||
|
|
|||
|
// Guardar comportamiento
|
|||
|
settings.Behavior.AutoSaveHistory = AutoSaveCheckbox.IsChecked ?? false;
|
|||
|
settings.Behavior.ShowNotifications = ShowNotificationsCheckbox.IsChecked ?? true;
|
|||
|
settings.Behavior.AutoCopyToClipboard = AutoCopyCheckbox.IsChecked ?? true;
|
|||
|
settings.Behavior.NotificationDuration = (int)(NotificationDurationSlider.Value * 1000);
|
|||
|
|
|||
|
settings.Save();
|
|||
|
DialogResult = true;
|
|||
|
Close();
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(
|
|||
|
$"Error al guardar la configuración: {ex.Message}",
|
|||
|
"Error",
|
|||
|
MessageBoxButton.OK,
|
|||
|
MessageBoxImage.Error
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void CancelButton_Click(object sender, RoutedEventArgs e)
|
|||
|
{
|
|||
|
DialogResult = false;
|
|||
|
Close();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|